浮点往返基数转换

主要观点:存储在内存中的浮点数以人类可读的十进制输出并重新读回时,在特定条件下可精确恢复原数;1968 年 D.W.Matula 对此问题有更普遍的回答;对于不同精度的浮点数(如双精度double、单精度等),精确转换所需的十进制位数不同。
关键信息:浮点数存储与转换的相关定理,即若不存在正整数 i 和 j 使β^i = γ^j,则往返精确转换的充要条件是γ^(q - 1) > β^p;对于 C 语言中的double类型,β = 2,p = 53,打印到γ = 10 时,q = 17 可保证往返精确转换;单精度浮点数需 q = 9 位十进制数,四精度数需 q = 36 位十进制数;Matula 定理中需γ^q ≥ β^p 且γ^(q - 1) > β^p 几乎足够,多一位十进制数可保证往返精确转换,如 p = 5 时仅用两位十进制数往返转换不精确。
重要细节:1968 年的相关论文及引用;浮点数分数部分位数分配情况,如 C 语言double的 64 位中 52 位用于存储分数;通过具体例子如 17/16 说明多一位十进制数的必要性等。

阅读 12
0 条评论