【问题标题】:Getting NaN output in C#在 C# 中获取 NaN 输出
【发布时间】:2014-03-05 12:49:37
【问题描述】:

我正在尝试在 C# 中的控制台应用程序上获得一个简单的结果

Console.Write("Enter a number: ");
double x = Convert.ToDouble(Console.ReadLine());
x=(7*x/4+1/2) - (5*x/4+1/2)*Math.Acos(Math.PI*x);
Console.WriteLine(x);

这导致了 NaN,我不知道为什么。我不是很精通编程,所以我确信它是显而易见的。谢谢!


编辑:应该是 Math.Cos,而不是 Math.Acos。现在我遇到了别的东西,当我输入说 x=3 时,它返回的结果是 9;但是,it should result in 10。有什么原因吗?

【问题讨论】:

  • 我相信你只能取 -1 和 1 之间数字的 arccos。所以你必须确保 (Math.PI*x) 会产生一个介于 -1 和 1 之间的数字。
  • 如果您还有第二个问题请提出一个新问题。每个问题一个问题!
  • 另外,如果你不破坏你的数据,你会发现你的程序更容易调试。说double result = (7... Console.WriteLine(result); 而不是破坏x 的值。变量很便宜;做很多。
  • 这里有一个提示:如果你说(7.0 * x / 4.0 + 1.0 / 2.0 )... 等等。那么你得到正确答案了吗?你明白为什么会有不同吗? 1/2 为零,1.0/2.00.5。 C# 进行整数算术in integers.

标签: c# nan


【解决方案1】:

从拆分开始。一旦你得到一个 NaN,之后的所有数学都是一个 NaN!

您必须使用 isNaN 检查 NaN,因为 x == NaN 总是错误

【讨论】:

  • 绝对应该是 Cos,而不是 Acos。但是,现在我得到了不正确的值(见编辑)。你注意到什么了吗?
【解决方案2】:

您正在使用Math.Acos,它只能接受介于 -1 和 +1 之间的输入。当你输入 Pi 时,它返回 NaN,然后​​打破整个公式。你可能只想Math.Cos

编辑

得到错误答案时,可能是1/2 上的整数除法。整数除法时,答案会被截断,所以1/2 的结果是0,而不是预期的0.5,因此答案会减1。试试1.0/2.0

【讨论】:

  • 啊太棒了!这只发生在 1/2、2/4 等?
  • 每当您尝试除以整数时,无论是变量还是常量(如上),都会发生这种情况。这是经常出现并且需要处理的事情。
【解决方案3】:

作为一种好的做法,您还应该检查用户输入的文本是否实际上是一个数字。您可以使用double.TryParse,如果无法将文本解析为数字,则返回 false。您当前的代码将引发异常

【讨论】:

    【解决方案4】:

    Arccos pi = "余弦为 pi 的角"。余弦只在 -1 到 +1 的范围内。

    【讨论】:

      猜你喜欢
      • 2015-02-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-05-24
      • 2020-07-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多