c# - 输出无穷大的值
Posted
技术标签:
【中文标题】c# - 输出无穷大的值【英文标题】:c# - outputting a value of infinity [closed] 【发布时间】: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 上找不到任何关于它试图显示的数值的内容。
【参考方案1】:
您的代码为除法部分返回值 0,这会导致无穷大值。这是真的,代码没有任何问题。您需要检查计算。
double input1 = 45;
double input2 = 42;
double input3 = 1;
double a = (input1 - input2 * Math.Pow(input3, 2.0))
/ (1 - Math.Pow(input3, 2.0));
Console.WriteLine((input1 - input2 * Math.Pow(input3, 2.0)));
Console.WriteLine((1 - Math.Pow(input3, 2.0)));
Console.WriteLine(a);
检查控制台的输出。
【讨论】:
当我更深入地研究它时,它实际上是把值减了 0。这是我第一次遇到这个问题,因为我期待一个除以 0 的异常,但我不知道双打当时能够输出“无限”。计算问题似乎仅在将 1 传递到 input3 时才会发生 是的,这是这里唯一的情况......【参考方案2】:我将您发布的用于计算 a
的代码粘贴到 Java 测试程序中,并进行了最小的更改以将其转换为可编译的 Java。我在前三个声明中添加了;
,并将Math.Pow
更改为Math.pow
:
public class Test
public static void main(String[] args)
double input1 = 45;
double input2 = 42;
double input3 = 1;
double a = (input1 - input2 * Math.pow(input3, 2.0))
/ (1 - Math.pow(input3, 2.0));
System.out.println(a);
程序按预期打印“Infinity”。
如果您的 Java 程序有一些不同,那么您在将其转换为 C# 时会出现一些错误。
【讨论】:
以上是关于c# - 输出无穷大的值的主要内容,如果未能解决你的问题,请参考以下文章