gpt4 book ai didi

python - 将字符串解析为 float 的 python 标准是什么?

转载 作者:太空宇宙 更新时间:2023-11-03 15:34:54 24 4
gpt4 key购买 nike

对于比较简单的 float ,数值精度足以准确表示。比如17.5等于17.5

对于更复杂的 float ,比如

17.4999999999999982236431605997495353221893310546874 = 17.499999999999996447286321199499070644378662109375
17.4999999999999982236431605997495353221893310546875 = 17.5

对上面的第一个数字使用 as_integer_ratio(),得到 (4925812092436479, 281474976710656) 并且因为 (4925812092436479*2+1)/(2*281474976710656) 等于上面的第二个数字,很明显 >=17.5 和 <17.5 之间的分区是 1/(2*281474976710656)。

python 标准是否保证特定的 float 将被“分类”到上面的特定容器中,或者它是否依赖于实现?如果有保证,又是如何决定的?

对于上面我使用的 python 3.5.6,但我对 python 3.x 的一般答案感兴趣,如果它存在的话。

最佳答案

For relatively simple floats, the numerical precision is sufficient to represent them exactly

不是真的。是的,17.5 可以精确表示,因为它是 2 的幂的倍数(准确地说是 2-1 的倍数)。但即使是非常简单的 float ,如 0.1 也无法准确表示。它依赖于文本到 float 的转换例程来获得尽可能接近的表示。

转换由运行时(或编译器的 C 或 Java 运行时,对于文字)完成,它使用 C 或 Java 函数(如 C 的 strtod())来完成此操作 ( Java 实现了 David Gay 的 strtod() 的代码,但使用的是 Java 语言)。

并非strtod() 的每个实现,即并非每个 C/Java 编译器都使用相同的方法进行转换,因此某些结果可能会有细微的差异,通常是微不足道的差异/strong>.


FWIW,网站 Exploring Binary (没有隶属关系,我只是一个忠实粉丝)有很多关于这个主题的文章。显然没有想象中那么简单。

关于python - 将字符串解析为 float 的 python 标准是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55485590/

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