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)
| 归档时间: |
|
| 查看次数: |
107 次 |
| 最近记录: |