C# - 无限数

标签 c# winforms numbers nan

我目前正在开发某个程序(在 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,(这是正确的结果)。 但是当我在我的程序中使用 .NET 函数时,我得到的 t = -0.9165664 的结果是 NaN(= 不是数字),为什么?这不是一个异常(exception),不是除以零或类似的东西。

我在程序中使用的代码:

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 的类型更改为 double。

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

有人可以向我解释哪里出了问题或建议可能的解决方案吗?

感谢帮助!!!

最佳答案

问题是 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));

关于C# - 无限数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51250265/

相关文章:

c++ - 计算第 n 个加泰罗尼亚数

c - "n * (rand()/RAND_MAX)"是否产生偏斜的随机数分布?

c# - 为什么 JSON 响应中的 HTML 会被编码?

c# - 使用 BouncyCaSTLe 进行 OpenPGP 加密

c# - 分层 winform 复选框

c# - 如何将 "123"添加到字符串的开头并将其填充为正好 12 个字符?

c# - 为什么 SortedSet<T>.GetViewBetween 不是 O(log N)?

c# - 如何将 Unicode 值转换为 ASCII 字符串?

c# - 虚拟模式下的闪烁 ListView

php - 在 PHP 中将字符串 [基本上是逗号分隔的数字] 转换为整数的最佳方法