【发布时间】:2016-09-22 20:50:51
【问题描述】:
我修改了部分计算以解释我遇到的问题。我正在将工作 Java 代码转换为 C# 应用程序。
声明一个双变量进行以下计算,并传递以下输入值,例如:
double input1 = 45
double input2 = 42
double input3 = 1
double a = (input1 - input2 * Math.Pow(input3, 2.0)) / (1 - Math.Pow(input3, 2.0));
这在 c# 中输出为 Infinite,但 Java 显示该值。输出无穷大,影响下面的其他计算。
double b = input1 + input2 - 2 * a (becomes -Infinite)
double c = b + a (gives you NaN)
a、b 和 c 被输出到单独的文本框中,每个都显示为 Infinite 或 NaN。
Textbox1.Text = a.ToString("F") (Infinite)
Textbox2.Text = b.ToString("F") (-Infinite)
Textbox3.Text = c.ToString("F") (NaN)
我知道这是由于 IEEE 标准,但实际上有没有一种方法可以让变量 a 显示值而不是显示无限,这样它就不会影响计算或将结果输出到小数点后 2 位的文本框中?
【问题讨论】:
-
"变量 a 显示值" 你希望 a 有什么值而不是
Infinity? -
"但 Java 显示值" Java 中上述计算输出什么值?
-
显然
1 - Math.Pow(input3, 2.0)返回 0,因为1 ^ 2 = 1,导致NullDevisionException。我怀疑java会忽略这一点并给你一个价值。 -
C# 在这里是正确的,如果 Java 给你一个不同的答案,那么它就有很大的问题。我认为您更可能误译了代码。 (@HimBromBeere 对双精度除以零不会给出异常 - 它给出了无穷大的结果)
-
除 1 以外的任何值都可以正常输出。 HimBromBeere 是对的。我去科学计算器上仔细检查了这个,它跳水了 0。所以我给出的计算中可能有一个错误。但它可能没有显示除以 0 的异常,而是试图打开通往地狱之门的门户。有趣,因为这是我第一次遇到这种情况。我原以为会引发异常,但在 google 上找不到任何关于它试图显示的数值的内容。
标签: c# math double nan infinite