我知道 double 是 64 位,float 是 32 位:
漂浮:
1 bit for the sign
8 bits for the exponent
24 bits for the fraction
Run Code Online (Sandbox Code Playgroud)
双倍的:
1 bit for the sign
11 bits for the exponent
53 bits for the fraction / mantissa
Run Code Online (Sandbox Code Playgroud)
问题是,我们如何手动将它们相互转换?(我知道精度会丢失)。只是32 bit right shift将 double 转换为 float 吗?并将32 bit left shift浮点数转换为双精度数?
将标志放在一边;两种格式都是一样的。
\n\n如果指数字段全为 1:
\n\n如果指数字段既不是全 1 也不是全 0:
\n\n如果指数字段全为零:
\n\n如果实际尾数为零,则返回由上面的符号、指数字段中全零以及尾数字段中全零组成的目标格式的数字。
\n\n如果实际尾数不是以 \xe2\x80\x9c1.\xe2\x80\x9d 开头,则将其左移一位(乘以二)并从实际指数中减一。重复此操作,直到尾数以 \xe2\x80\x9c1 开头。\xe2\x80\x9d
\n\n如果实际指数等于或超过目标格式的最大有限指数(binary32 为 127,binary64 为 1023):
\n\n如果实际指数等于或超过目标格式的最小正常指数(对于二进制 32 为 \xe2\x88\x92126,对于二进制 64 为 \xe2\x88\x921022):
\n\n否则,结果不正常(并且可能四舍五入为零):
\n\n| 归档时间: |
|
| 查看次数: |
781 次 |
| 最近记录: |