2010-12-29 12 views
1

Ich habe dies hier THINGY:effizientere Version von diesem?

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; 
} 

, die ich bei oft laufen, kann u mich mehr efficent Variante davon geben?

+0

Welche Sprache schreiben Sie? Bitte passend etikettieren. – ybungalobill

+0

Ich interessiere mich nicht für Sprache, ich begegne es in vielen Projekten mit verschiedenen Sprachen und Bibliotheken –

Antwort

4

Ich denke, dass Sie in JavaScript oder etwas ähnliches, wobei in diesem Fall die Verwendung schreiben:

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

Beachten Sie auch, dass Ihr Original-Code tritt in eine Endlosschleife, wenn packetSize = 0;

Gleichwertig in C++:

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

Vorsicht vor Integer Division: int/int gibt einen int nicht einen float zurück –

+0

@Markus: Javascript gibt Float, IMMER. hasse Javascript. – ybungalobill

+0

nein das ist es nicht, wenn ich numOfPackets (901.900) habe, gibt es 2 zurück, aber es soll 1 zurückgeben; mit anderen Worten, es hängt davon ab, wie viele qwhole Pakete in Puffer bestimmter Größe passen. und diese Lösung verwendet eine Bibliothek, die ich möglicherweise nicht habe –

Verwandte Themen