在C#中获取NaN输出

时间:2014-02-07 22:40:17

标签: c# nan

我想在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。有什么理由为什么?

4 个答案:

答案 0 :(得分:3)

首先将其拆分。一旦你得到一个NaN,那之后的所有数学都是NaN!

您必须使用isNaN检查NaN,因为x == NaN 始终为假

答案 1 :(得分:1)

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

修改

在得到错误答案时,它可能是1/2上的整数除法。在对整数进行分割时,答案会被截断,因此1/2会产生0,而不会产生预期的0.5,从而为您提供1个答案。使用1.0/2.0 < / p>

答案 2 :(得分:1)

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

答案 3 :(得分:0)

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