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)
函数返回最大值。 Float
和pow(Double , Double)
的8个小数会返回Double
的16位小数值。
为什么有人这样解释呢?
是否可以为Float
值获得最多16个小数?
注意:您可以将其复制并粘贴到游乐场中以查看结果。
提前致谢。
答案 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个小数。