c# - 输出无穷大的值

c# - outputting a value of infinity

我修改了部分计算以解释我遇到的问题。我正在将有效的 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 显示值。由于输出的是infinite,下面的其他计算都会受到影响

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 显示值而不是显示无限以便不影响计算或将结果输出到小数点后两位的文本框中?

我将您发布的用于计算 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# 的方式存在一些错误。

您的代码为除法部分返回值 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);

检查控制台上的输出。