根据 Swift 的说法,可以存储为
Double
的最大有限幅度远大于 Int
。
print(Double.greatestFiniteMagnitude) // 1.7976931348623157e+308
但是,this问题的公认答案表明您在存储大值时可能会失去精度。
那么,在不损失精度的情况下,可以保存为 Double 的最大值是多少?
UInt64(2) << Double.significandBitCount
即2^53.
即9,007,199,254,739,992.
Swift
Double
遵循IEEE 754,它指定它们的尾数1为52个显式位加1个隐式位(对于正常形式的双精度数始终为0b1)。
所有具有该大小或更小的整数都可以在
Double
内完美表示;在 UInt64
和 Double
之间转换它们没有任何损失。
¹ 有时称为“尾数”,如 Swift 的
Double
API 中所示。