quel est le meilleur moyen d’éviter un zéro négatif dans la production?

Comme dans cette question, il existe certaines différences entre le zéro positif et le zéro positif en nombres à virgule flottante. Je sais que c’est pour des raisons importantes. Ce que je veux savoir, c’est un code court qui évite un zéro négatif en sortie.

par exemple dans le code suivant:

cout << fixed << setprecision(3); cout << (-0.0001) << endl; 

“-0.000” est imprimé. mais je veux “0,000”.

Notez que tous les autres nombres négatifs (par exemple -0,001) doivent toujours être imprimés avec le signe moins les précédant. Tout simplement * -1 ne fonctionnera pas.

Essayez en fonction de votre précision.

cout << ((abs(ans) < 0.0005)? 0.000: ans) << endl;

Que diriez-vous:

 cout << (value == 0.0 ? abs(value) : value) << endl; 

Si vous tenez à la précision arbitraire, par opposition à une précision fixe de 3, vous aurez besoin d’un peu de travail. Fondamentalement, vous devrez faire une pré-vérification avant que le cout vérifie si le nombre sera formaté d’une manière qui ne vous plait pas.

Vous devez trouver l’ordre de grandeur du nombre pour voir s’il perd les chiffres imprécis, ne laissant que le bit de signe.

Vous pouvez le faire en utilisant le logarithme en base 10 de la valeur absolue du nombre. Si le résultat négatif est supérieur à la précision que vous avez définie, le nombre s’affiche comme vous ne le souhaitez pas.

log10 de 0,0001 est -4.

négatif de (-4) est 4.

4> 3 (la précision arbitraire) Ainsi, la valeur apparaîtra malheureusement.

En très mauvais pseudocode:

 float iHateNegativeZeros(float theFloat, int precision) { if((theFloat < 0.0f) && (-log10(abs(theFloat)) > precision)) { return -theFloat; } else { return theFloat; } }