2010-12-29 5 views
1

у меня есть эта штуковина здесь:более эффективная версия этого?

function numOfPackets(bufferSize, packetSize) { 
    if (bufferSize <= 0 || packetSize > bufferSize) return 0; 
    if (packetSize < 0) throw Error(); 
    var out = 0; 


    for(;;){ 
    out++; 
    bufferSize = bufferSize - packetSize; 
    if(packetSize > bufferSize) break; 
    } 

    return out; 
} 

, который я бегу на часто, может у меня более сверхвысоком вариант этого?

+0

Какой язык вы пишете? Пожалуйста, отметьте соответствующим образом. – ybungalobill

+0

Я не забочусь о языке, я встречаюсь с ним во многих проектах с разными языками и библиотеками –

ответ

4

Я предполагаю, что вы пишете в JavaScript или что-то подобное, и в этом случае использование:

function numOfPackets(bufferSize, packetSize) { 
    if (bufferSize <= 0) return 0; 
    if (packetSize <= 0) throw Error(); 
    return Math.floor(bufferSize/packetSize); 
} 

Также обратите внимание, что исходный код входит в бесконечный цикл при packetSize = 0;

Эквивалентное в C++:

int numOfPackets(int bufferSize, int packetSize) { 
    if (bufferSize <= 0) return 0; 
    if (packetSize <= 0) throw Error(); 
    return bufferSize/packetSize; 
} 
+0

Остерегайтесь целочисленного деления: int/int возвращает int не float –

+0

@Markus: javascript возвращает float, ВСЕГДА. ненавижу javascript. – ybungalobill

+0

нет, это не так, если у меня есть numOfPackets (901,900), он возвращает 2, но он должен возвращать 1; другими словами, это локи, сколько пакетов qwhole подходит в буфере определенного размера. и это решение использует библиотеку, у которой может быть не –

Смежные вопросы