2010-12-29 4 views
1

j'ai ce machin ici:version plus efficace de cela?

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

que je dirige à souvent, peut me donner variante plus efficent de celui-ci?

+0

Quelle langue écrivez-vous? Veuillez marquer correctement. – ybungalobill

+0

je ne me soucie pas du langage, je le rencontre dans de nombreux projets avec différentes langues et bibliothèques –

Répondre

4

Je suppose que vous écrivez en JavaScript ou quelque chose de similaire, dans lequel cas d'utilisation:

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

Notez également que votre code d'origine entre dans une boucle infinie lorsque packetSize = 0;

Équivalemment en C++:

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

méfiez-vous de la division entière: int/int renvoie un int pas un flotteur –

+0

@Markus: javascript renvoie float, TOUJOURS. déteste javascript. – ybungalobill

+0

non ce n'est pas ça, si j'ai numOfPackets (901 900) il renvoie 2 mais il est censé retourner 1; en d'autres termes, cela dépend du nombre de paquets qwholes qui peuvent être insérés dans des tampons d'une certaine taille. et cette solution utilise la bibliothèque que je n'ai pas –