首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >我在这段C#代码中使用Math.Pow(a,b)函数有多错?

我在这段C#代码中使用Math.Pow(a,b)函数有多错?
EN

Stack Overflow用户
提问于 2011-01-18 19:04:51
回答 3查看 1.6K关注 0票数 2

我在以下代码中找不到任何错误,MSVC#编译器将NAN存储在“c”中:

代码语言:javascript
运行
复制
double c = Math.Pow(-8d, 1d / 3d);

虽然我认为这一行应该计算"c“的-2,但编译器将NAN存储在"c”中?我说错了什么吗?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2011-01-18 19:08:37

浮点数的幂函数仅定义为正的基数或整数指数。试一试

代码语言:javascript
运行
复制
double c = - Math.Pow(8d, 1d / 3d);

实际上,1/3不能精确地表示为浮点数,但需要四舍五入。舍入指数的精确实数结果在理论上甚至不存在。

票数 7
EN

Stack Overflow用户

发布于 2011-01-18 19:11:39

通常,人们不会说(-8)^(1/3) = -2。

的确,(-2)^3 = -8是正确的,但负数的幂是一个复杂的问题。

您可以在Wikipedia上阅读有关该问题的更多信息

对数方法和有理指数方法都不能用来将^ r定义为负实数a和任意实数r的实数。实际上,对于每个实数r,er都是正的,因此对于≤0,ln(a)不被定义为实数。(另一方面,负数a的任意复数幂可以通过选择a的复对数来定义。)

简而言之,当a是负数时,很难在数学上恰当地定义a^r应该是什么,以免人们开始处理复数,因此人们通常应该避免尝试这样做。

票数 6
EN

Stack Overflow用户

发布于 2011-01-18 19:10:12

答案是一个复数:1.0+1.732050807568877i。.NET的Math类不支持复数。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/4723320

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档