2012-10-30 4 views
2

que je fais certaines opérations de la matrice où les éléments de la matrice obtient des valeurs de certaines variables de la manière suivante:se débarrasser de signer zéro

elem[1] = -x 

mais quand x = 0 il définit -0 dans la matrice qui est indésirable. Un moyen définitif d'empêcher cela?

+3

Quel est le type de éléments de matrice et pourquoi est -0 indésirable? – juanchopanza

+0

Le type est probablement 'float' ou' double' si cela peut arriver du tout ... – Joey

+0

La matrice est de type float – parth

Répondre

4

Vous pouvez effectuer les opérations suivantes:

elem[i] = -x + 0.0; 

Je l'ai testé le code suivant:

float a = -0.0; 
printf("%f %f\n", a, a + 0.0); 

qui produit la sortie suivante:

-0.000000 0.000000 
+0

C'est génial (sans branche!) Si c'est garanti par IEEE 754 - mais est-ce? Pour autant que je sache, _x_ +/- 0.0 = _x_, donc optimiser l'ensemble de l'instruction serait une optimisation de compilateur valide à mon avis. Aussi, cela dépend-il des modes d'arrondi? – Damon

+0

@Damon Je ne sais pas pourquoi cela arrive. En fait, c'est assez bizarre pour moi le fait que '-0.0 + 0.0 == 0.0' et' -0.0 + -0.0 == -0.0' (au moins dans mon gcc). –

Questions connexes