spr*_*aff 4 string floating-point floating-accuracy
此问题涉及C/x86上使用的IEEE标准浮点数.
是否可以将任何数字(即排除特殊值,如NaN)浮点数或双精度表示为十进制字符串,以便将该字符串转换回浮点数/双精度数将始终完全产生原始数字?
如果没有,什么算法告诉我给定的数字是否会出现转换错误?
如果是这样,请考虑这一点:当转换为二进制时,一些小数部分在数值上不会与原始十进制值相同,但反之则不正确(因为二进制具有有界精度,因此任何十进制扩展都是有限的,如果不是则完美截断),所以这是另一个问题......
是否有必要在十进制表示中引入故意错误以欺骗atof(或其他)函数产生确切的原始数字,或者一个天真的非截断toString函数是否足够(假设一般可以进行精确转换)?
根据这个页面:
实际上,IEEE754-1985标准规定在所有情况下,17个十进制数字就足够了.但是,当使用17位数字时,标准实现是否必须保证无损转换似乎有点模糊.
因此,存储一个double至少包含17位数字(正确舍入)的十进制字符串将保证它可以转换回二进制double而不会丢失任何数据.
换句话说,如果要将每个可能的双精度值转换为17位数的十进制字符串(正确舍入),它们将全部映射到不同的值.因此没有数据丢失.
我不确定单精度的最小截止值.但我怀疑它会是8位或9位数.
| 归档时间: |
|
| 查看次数: |
1729 次 |
| 最近记录: |