pow()行为与Float和Double不同

时间:2018-03-16 11:50:04

标签: ios swift floating-point double pow

pow()我遇到了一个奇怪的问题。请检查以下功能

 let r = 8.5/1200
 let n = ((5*12.0)+1)

 let pp = (pow(Float(1 + r), Float(n)))
 debugPrint(pp) // 1.53811562

 let pq = (pow((1 + r), n))
 debugPrint(pq) // 1.5381189771003985

此处pow(Float, Float)函数返回最大值。 Floatpow(Double , Double)的8个小数会返回Double的16位小数值。

为什么有人这样解释呢?

是否可以为Float值获得最多16个小数?

  

注意:您可以将其复制并粘贴到游乐场中以查看结果。

提前致谢。

3 个答案:

答案 0 :(得分:2)

Float使用IEEE 754 four byte single precision number。 24位分配给有效数字,8位分配给指数。使用24位精度,它可以表示精确度超过7位小数位

Double - 这是Swift的默认浮点格式,使用IEEE双精度八字节数。有效数字使用53位,指数为11位。使用53位精度,它可以表示精度不到16位小数。

pq打印16位数的原因是默认情况下编译器已将参数类型推断为Double

  

浮动值是否可以达到16分数?

没有。没有足够的精确度。

答案 1 :(得分:1)

请查看Double and Float之间的区别。

Double被称为double,因为它与float相比具有双精度。

要在计算中得到相同的结果,只需将Double转换为Float,反之亦然,具体取决于您希望实现的目标。

答案 2 :(得分:1)

在swift中

Float - 用于表示 32位浮点数和小数点较小的数字。例如,3.12345678

Double - 用于表示 64位浮点数,并在浮点值必须非常大时使用。例如,3.123456789123456

这可能是原因

根据Apple Docs

  

Double的精度至少为15位十进制数,而Float的精度可以小至6位十进制数。要使用的适当浮点类型取决于您在代码中使用的值的性质和范围。在任何一种类型都适合的情况下,首选Double是

和 不,浮动值不能包含16个小数。