2012-10-30 115 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中)。 –