gpt4 book ai didi

ios - 基础:为什么 Int64.max 和 Double(Int64.max) 在 Swift iOS SDK 中打印 2 个完全不同的值

转载 作者:可可西里 更新时间:2023-11-01 00:54:23 34 4
gpt4 key购买 nike

这是我的 Swift 代码

print("\(Int64.max)")
print("\(Double(Int64.max))")

它产生以下输出

9223372036854775807

9.223372036854776e+18

为什么两者的值完全不同9.223372036854776e+18 - 9223372036854775807 = 193 仅供引用

最佳答案

您在输出中看到的 Double 的值只是一些有效数字的近似值。我们可以通过String(format:)

看到更多有效数字
print(String(format: "%.1f", Double(Int64.max)))

这打印:

9223372036854775808.0

所以实际上,差异并不像您声称的那样大 (193)。仅相差 1。

Why is there a difference?

Double 使用浮点表示存储值。它可以表示范围很广的数字,但不是该范围内的每个数字。 Double 使用 53 位尾数、1 位符号位和 11 位存储指数。尾数代表数字的有效数字,指数告诉你把小数点放在哪里。小数点一侧代表 2 的正幂,小数点另一侧代表 2 的负幂。例如:

0.1010000    0010
mantissa exponent

指数表示将小数点向右移动 3 次,因此尾数变为 010.10000。左边的1代表2,右边的1代表二分之一(2^-1),所以这个 float 代表的是数2.5

要表示 Int64.max (2^63-1),需要 63 位尾数全部为 1,指数中的值为 63。但是 Double 没有那么多位的尾数!所以只能近似。 Int64.max + 1 实际上可以用 Double 表示,因为它等于 2^63。您只需要一个 1 后跟尾数中的 52 个 0 和指数可以存储 64。这就是 Double 所做的。

关于ios - 基础:为什么 Int64.max 和 Double(Int64.max) 在 Swift iOS SDK 中打印 2 个完全不同的值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53425447/

34 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com