2012-10-30 151 views
2

我正在做一些矩陣運算,其中矩陣元素中獲得通過以下方式從某些變量的值:擺脫符號零

elem[1] = -x 

但是當x = 0它設置這是不可取的矩陣-0。任何明確的方法來防止這種情況?

+3

是什麼的類型矩陣元素,爲什麼-0不合需要? – juanchopanza

+0

該類型可能是'浮動'或'雙',如果這可能發生在所有... – Joey

+0

矩陣是浮動類型 – parth

回答

4

你可以做到以下幾點:

elem[i] = -x + 0.0; 

我測試過下面的代碼:

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

將會產生以下的輸出:

-0.000000 0.000000 
+0

這是真棒(無分支!),如果它保證由IEEE 754工作 - 但是它?據我所知,_x_ +/- 0.0 = _x_,所以在我看來,優化整個語句將是一個有效的編譯器優化。另外,這是否取決於舍入模式? – Damon

+0

@Damon我不知道爲什麼會發生這種情況。實際上,對我來說很奇怪的事實是'-0.0 + 0.0 == 0.0'和'-0.0 + -0.0 == -0.0'(至少在我的gcc中)。 –