【发布时间】:2015-01-18 02:52:03
【问题描述】:
我看到参数可能都是双精度的
但是对于像
printf("%lf\n",pow(-32,0.2));
return 0;
输出是
明显错误
我已经阅读了https://stackoverflow.com/questions/22583740/how-to-implement-a-pow-function-in-python-for-float-as-well-as-negative-numbers,但它不能用于浮点负数。
那么关于如何实现支持负浮点数的 pow 函数有什么建议吗?
我有一个想法,对于 pow(double x,double n),如果x 为负数,则执行pow(-x,n),并在返回值之前检查n。
以pow(-32,0.2) 为例,首先我选择pow(32,0.2) 并得到2,然后我检查n,在这种情况下为0.2。我发现 0.2 又名 1/5 是一个“奇数”数,所以我否定答案然后返回 -2
这是解决问题的可能方法吗?
[编辑]
我知道答案可能不是一个,但我希望我能得到一个浮点数作为答案(如果有的话)。
【问题讨论】:
-
pow(1.0, n)是所有n的1。如果n是偶数,pow(-1.0, n)将是1,如果n是奇数,则-1。您希望pow(-1.0, 0.5)的结果是什么? 提示:结果必须是复数,而复数不能用浮点数表示。 -
0.2怎么奇怪?将其除以 2 后,您会得到一个余数,这就是“奇数”的定义,但据此估计 所有 分数都是奇数。可以是“真”、“假”(如果是,请提供反例)或“未定义”的陈述,因为“偶数”和“奇数”数的推理完全依赖于自然数。 -
@Klas Lindbäck 我可以为这种情况抛出一个错误。这不是我的问题的重点。
-
我认为 0.2 在这种情况下被认为是奇数,因为它是一个“奇数”根,即第五个根。 0.5 将被视为偶数,即第二个(平方)根。奇数根不会导致复数。
标签: c