关于标准数学函数pow的问题

hupo1982 2007-06-08 03:36:48
今天才发现用标准数学函数pow求幂的时候有一个限制,就是底数为负数的时候指数必须为整数,那如果我想计算(-3125)^0.2 = 5该怎么算呢?是有什么扩展的数学函数库还是怎么算?
还发现Wnidows自带的计算器也不能算这个,网上很多下载的计算器也不能算,google和baidu的计算器倒是能算,搜狗的也算不了,真是昏倒!
...全文
397 15 打赏 收藏 转发到动态 举报
写回复
用AI写文章
15 条回复
切换为时间正序
请发表友善的回复…
发表回复
zlj1202 2007-06-15
  • 打赏
  • 举报
回复
严谨 是靠自己解决的
mLee79 2007-06-08
  • 打赏
  • 举报
回复
偶觉得这东东还是用复数计算比较方便
-3125^.2 == (3125*e^((2*n+1)PI*i))^.2 = 5*e^((2*n+1)*.2*PI*i)
一共获得5个解, 其中只有一个实数 -5 , 其它的4个是复数 ...
jixingzhong 2007-06-08
  • 打赏
  • 举报
回复
int n=pow(3125, 0.2);

然后根据符号: n = -n; 就得到结果 5 了 ....
jixingzhong 2007-06-08
  • 打赏
  • 举报
回复
恩,看岔了 ...

可以这样,
自己先判断一下 结果是否在实数域内,
如果是,判断一下结果的符号,
然后对数据的 绝对值 进行 0.2 次方即可。
晨星 2007-06-08
  • 打赏
  • 举报
回复
jixingzhong(瞌睡虫·星辰) ( ) 信誉:100 Blog 加为好友 2007-06-08 17:45:45 得分: 0


(-3125)^0.2

这个在数学上就是不对的吧??
=========================
如果你把0.2看作“五分之一”,倒不能说不对。
主要问题就在于计算机里的浮点数不可能去精确地对应数学上的分数。
jixingzhong 2007-06-08
  • 打赏
  • 举报
回复
(-3125)^0.2

这个在数学上就是不对的吧??
wj_fantasy 2007-06-08
  • 打赏
  • 举报
回复
开方运算本来就不能用负数的,那样的话结果就是虚数了。
huashizhixin 2007-06-08
  • 打赏
  • 举报
回复
换更高版本的编译器,用更高位数的cpu,这不是计算机的问题,呵呵
lightnut 2007-06-08
  • 打赏
  • 举报
回复
用C++的complex版本吧, 不过算出来的是复数主值, 楼主想要的实数.
正如steedhorse(晨星) 所言, 这是个数学问题
晨星 2007-06-08
  • 打赏
  • 举报
回复
再说,计算机里的浮点数也不见得总是能非常精确的代表一个分数。
比如,对于分数,1/7来说,x ^ (1 / 7)在负数域上本来是有定义的。但如果你写:
float f = 1 / 7.0;
CPU当然无法判断出这个f本来是从一个分母是奇数的整数算式上算出来的。
mLee79 2007-06-08
  • 打赏
  • 举报
回复
这东西在实数域下本来就没办法算嘛, 过程要用复数计算的三,结果是这样也很正常三
晨星 2007-06-08
  • 打赏
  • 举报
回复
当指数不为整数时,并非所有幂函数的定义域都是整个实数域。
比如:函数x ^ (1/2)的定义域就不包括负数。
这是个数学问题,不是计算机问题。
hupo1982 2007-06-08
  • 打赏
  • 举报
回复
有没有严谨一点的方法,毕竟这种运算确实有很多是非法的,比如(-25)^0.5在实数范围内就是非法的
todototry 2007-06-08
  • 打赏
  • 举报
回复
up之
www_adintr_com 2007-06-08
  • 打赏
  • 举报
回复
先算 (3125)^0.2, 在结果上面在加一个负号就完了

69,382

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧