我目前正在使用某个程序(在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(=不是数字),并且当我在标准计算器中计算得出时,我会得到标准正确值。 / p>
对于示例:t = -0.9165664,f(t)= -0.1000096,(正确的结果是泰铢)。 但是当我在程序中使用.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));
注意:我无法将ft的类型增加一倍。
当我在上面的代码中输入t> 0时,它将给出正确的结果。
有人可以向我解释什么错误或提出可能的解决方案吗?
感谢帮助!
答案 0 :(得分:6)
问题是Math.Pow函数的定义,请参见the documentation。由于您的指数是固定的,并且您正在寻找第三个根为实数,因此请尝试
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));