【发布时间】:2011-06-25 16:11:39
【问题描述】:
例如,在:
bool eq = (1 / double.Parse("-0.0")) == (1 / -0.0);
eq 将是 false。
double.Parse 必须经历一些麻烦才能显式忽略零符号,即使不这样做几乎不会导致问题。
因为我需要原始表示,所以我必须编写自己的解析函数,它可以处理负零的特殊情况,并将double.Parse 用于其他所有内容。
这不是一个大问题,但我真的很想知道他们为什么决定忽略零的符号,因为在我看来,不这样做并不是一件坏事。
【问题讨论】:
-
为什么需要零符号?毕竟 IEEE 754 声明
+0 == -0。 -
您的代码示例如何不抛出 DivideByZeroException?
-
@Donal:因为我需要以字节为单位的原始表示,而且它是不同的。 @FishBasketGordo:因为在 IEEE 754 浮点中除以零是合法且定义明确的。
-
@Fish:使用浮点类型时不会引发该异常。 MSDN上是这么说的。 msdn.microsoft.com/en-us/library/…
-
这是因为 CLR 包含 COMNumber::NumberBufferToDouble() 中的代码,如果指数和尾数都为零,则无论符号如何,该代码都将结果显式设置为 0。你无法改变它。
标签: c#