Pas vraiment une réponse, mais un indice possible.
Les nombres conservés sous forme logarithmique peuvent être multipliés ou divisés en ajoutant ou en soustrayant simplement les nombres. Par exemple, exp(log(a) + log(b))
est identique à a * b
. Ou, en utilisant a = 41, b = 101, ce serait exp(3.71357 + 4.61512)
, qui est exp(8.32869)
, ou 4140.98930
. Évidemment, la précision joue un rôle, et j'ai tronqué les chiffres à 5 chiffres. 41 * 101
est 4141
.
Je n'ai pas traité votre exemple de code, et je ne comprends pas non plus pourquoi votre code fait les choses comme il le fait, mais j'espère que ce qui précède vous aidera à le reconstituer.
EDIT: J'ai exécuté quelques nombres à travers votre exemple de code. Si a = 41 et b = 101, et log_a = 3.71357 et log_b = 4.61512, alors votre code d'exemple calcule 4.95582
, et exp(4.95582)
est égal à 142.0
. La façon "la plus simple" d'obtenir ce même résultat est log(exp(log_a) + exp(log_b))
, mais comme d'autres l'ont souligné, cette méthode implique trois fonctions transcendantes coûteuses, alors que votre exemple de code n'en nécessite que deux (plus une comparaison triviale).
Compile probablement. C'est un avantage. –
Que voulez-vous dire exactement? Voulez-vous dire quel est l'avantage de la déclaration «if»? –
-1 pour être énormément vague. – JWWalker