string - 浮点到字符串的无损转换并返回 : is it possible?

标签 string floating-point floating-accuracy

这个问题是指 C/x86 上使用的 IEEE 标准浮点数。

是否可以将任何数字(即不包括 NaN 之类的特殊值)浮点数或 double 数表示为十进制字符串,以便将该字符串转换回浮点数/ double 数将始终准确地产生原始数字?

如果不是,什么算法会告诉我给定的数字是否会出现转换错误?

如果是这样,请考虑这一点:一些十进制小数在转换为二进制时,在数值上将与原始十进制值不同,但反之则不然(因为二进制具有有限精度,因此任何十进制扩展都是有限且完美的,如果不是)截断),所以这是另一个问题......

是否有必要在十进制表示中引入故意的错误以欺骗 atof (或其他)函数产生精确的原始数字,或者是一个天真的,非截断 toString功能是否足够(假设通常可以进行精确转换)?

最佳答案

根据 this page :

Actually, the IEEE754-1985 standard says that 17 decimal digits is enough in all cases. However, it seems that the standard is a little vague on whether conforming implementations must guarantee lossless conversion when 17 digits are used.



所以存储一个 double作为具有至少 17 位数字(正确四舍五入)的十进制字符串将保证它可以转换回二进制 double没有任何数据丢失。

换句话说,如果每个可能的 double 值都被转换为 17 位的十进制字符串(正确四舍五入),它们都将映射到不同的值。因此没有数据丢失。

不过,我不确定单精度的最小截止值。但我怀疑它将是 8 或 9 位数字。

关于string - 浮点到字符串的无损转换并返回 : is it possible?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8990454/

相关文章:

rust - 有没有办法从 `f64::from(0.23_f32)` 得到 0.23_f64?

c++ - C++ 中的 float 转换实际上是如何完成的?( double 到 float 或 float 到 double )

math - float 学坏了吗?

java - 浮点加法 - 给出奇怪的结果..!

c# - 字符串文件路径不起作用c#

比较、组合和确定字符串的长度?

c++ - 如何在 C++ 中将一般形式的二维直线方程转换为斜截式

python - float 代表的差异

在c中创建一个具有start和end的子字符串

swift - 如何在 ""中打印双引号?