关于标准数学函数pow的有关问题
关于标准数学函数pow的问题
今天才发现用标准数学函数pow求幂的时候有一个限制,就是底数为负数的时候指数必须为整数,那如果我想计算(-3125)^0.2 = 5该怎么算呢?是有什么扩展的数学函数库还是怎么算?
还发现Wnidows自带的计算器也不能算这个,网上很多下载的计算器也不能算,google和baidu的计算器倒是能算,搜狗的也算不了,真是昏倒!
------解决方案--------------------
当指数不为整数时,并非所有幂函数的定义域都是整个实数域。
比如:函数x ^ (1/2)的定义域就不包括负数。
这是个数学问题,不是计算机问题。
------解决方案--------------------
再说,计算机里的浮点数也不见得总是能非常精确的代表一个分数。
比如,对于分数,1/7来说,x ^ (1 / 7)在负数域上本来是有定义的。但如果你写:
float f = 1 / 7.0;
CPU当然无法判断出这个f本来是从一个分母是奇数的整数算式上算出来的。
------解决方案--------------------
int n=pow(3125, 0.2);
然后根据符号: n = -n; 就得到结果 5 了 ....
------解决方案--------------------
严谨 是靠自己解决的
今天才发现用标准数学函数pow求幂的时候有一个限制,就是底数为负数的时候指数必须为整数,那如果我想计算(-3125)^0.2 = 5该怎么算呢?是有什么扩展的数学函数库还是怎么算?
还发现Wnidows自带的计算器也不能算这个,网上很多下载的计算器也不能算,google和baidu的计算器倒是能算,搜狗的也算不了,真是昏倒!
------解决方案--------------------
当指数不为整数时,并非所有幂函数的定义域都是整个实数域。
比如:函数x ^ (1/2)的定义域就不包括负数。
这是个数学问题,不是计算机问题。
------解决方案--------------------
再说,计算机里的浮点数也不见得总是能非常精确的代表一个分数。
比如,对于分数,1/7来说,x ^ (1 / 7)在负数域上本来是有定义的。但如果你写:
float f = 1 / 7.0;
CPU当然无法判断出这个f本来是从一个分母是奇数的整数算式上算出来的。
------解决方案--------------------
int n=pow(3125, 0.2);
然后根据符号: n = -n; 就得到结果 5 了 ....
------解决方案--------------------
严谨 是靠自己解决的