pow() 行为与 Float 和 Double 不同

pow() behaviour different with Float and Double

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) 函数 return 最大。 Float 的 8 个小数和 pow(Double , Double) return 的值和 Double.

的 16 个小数

为什么会这样,谁能解释一下?

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

Note: You can copy and paste it in playground to see result.

提前致谢。

请查一下Double and Float的区别。

Double 之所以称为 double,是因为它与 float 相比具有双精度。

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

在swift

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

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

这可能是一个原因

根据 Apple 文档

Double has a precision of at least 15 decimal digits, whereas the precision of Float can be as little as 6 decimal digits. The appropriate floating-point type to use depends on the nature and range of values you need to work with in your code. In situations where either type would be appropriate, Double is preferred

还有 不,浮点值不能有 16 个小数。

Float 使用 IEEE 754 four byte single precision number。 24 位分配给有效数,8 位分配给指数。 24位精度,可以表示7位多一点的精度

Double - Swift 的默认浮点格式使用 IEEE 双精度八字节数。尾数使用 53 位,指数使用 11 位。具有 53 位精度,它可以表示不到 16 位十进制数字的精度。

pq之所以打印成16位是因为编译器默认推断参数类型为Double.

And is it possible to get upto 16 fractional number for Float value?

没有。精度不够。