为什么pow()在这种情况下报告无限值?

时间:2011-06-24 19:50:45

标签: iphone objective-c ios

我在我的应用程序中使用pow()函数:

float  IValuePlusOne =  (pow(2.25,120));

但报告的是无限值,而不是正确的结果。我甚至尝试了long longlong double数据类型,但无法使它们产生正确的输出。

我需要使用其他数据类型,还是需要在代码中进行其他更改?

2 个答案:

答案 0 :(得分:4)

正如其他人所指出的那样,你正在失去精确度并通过强制转换为浮点数来减少你可以表示的值的大小。运行以下代码:

double IValuePlusOne = pow(2.25,120.0);
NSLog(@"Test value: %f", IValuePlusOne);
我的iPhone上的

给出输出:

  

测试值:1827688475348373523156051712429585892114432.000000

看起来是正确的(1.827x10 ^ 42)。

答案 1 :(得分:1)

如果要对双倍无法容纳的值进行计算,请使用NSDecimalNumber