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# - 输出无穷大的值的主要内容,如果未能解决你的问题,请参考以下文章

复合辛普森规则无穷大输出

在 C# 中使用存储过程输出参数

在asp.net的自定义类(C#)中怎样把变量输出到页面?

C#有没有DEBUG调试输出的语句提供输出变量值?

HDU 3592 查分约束+判环

C#问题,MessageBox.Show()怎么输出已赋值的参数,具体如下: