C# - 无限数字

D.R*_*mer 2 c# numbers nan winforms

我目前正在处理某个程序(在C#.NET - winforms中),我遇到了以下问题:

我需要计算点(t,f(t))给出:

f(t)= [Sin(t)/ 16*Cos ^ 4(t)] ^(1/3),使得:t:-89.995-> 89.995.(t是数).

注意:t的值范围为-89.995到89.995.

我使用.NET函数Math.Sin(),Math.Cos(),Math.Pow()进行计算,从弧度到度的转换是正确的.

问题是,对于我放入f(t)的每个t <0,我从上述函数得到NaN(=非数字),当我在标准计算器中计算它时,我得到标准的正确值.

例如:t = -0.9165664,f(t)= -0.1000096,(Taht是正确的结果).但是当我在我的程序中使用.NET函数时,我得到的t = -0.9165664的结果是NaN(=非数字),为什么?它不是一个例子,不是零或类似的东西.

我在程序中使用的代码:

float t = -0.9165664;
float numerator = Math.Sin(t * Math.PI / 180.0f);
float denominator = 16.0f * Math.Pow(Math.Cos(t * Math.PI / 180.0f), 4)
float ft = (float)Math.Pow(numerator / denominator, 1.0f / 3.0f));
Run Code Online (Sandbox Code Playgroud)

注意:我不能将ft的类型加倍.

当我在上面的代码中添加任何t> 0时,它会给出正确的结果.

有人可以解释我有什么不对或建议可行的解决方案吗?

感谢帮助!!!

小智 6

问题是Math.Pow函数的定义,请参阅文档.由于您的指数是固定的,并且您正在寻找第3个根作为实数,尝试类似的东西

float t = -0.9165664;
float numerator = Math.Sin(t * Math.PI / 180.0f);
float denominator = 16.0f * Math.Pow(Math.Cos(t * Math.PI / 180.0f), 4)
float val = numerator / denominator;
float ft = Math.Sign(val) * (float)Math.Pow(Math.Abs(val), 1.0f / 3.0f));
Run Code Online (Sandbox Code Playgroud)