解析字符串以使其浮动的python标准是什么?

维克多

对于相对简单的浮子,数值精度足以准确地表示它们。例如17.5等于17.5

对于更复杂的浮动,例如

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将被“绑定”到上方的特定bin中,还是依赖于实现?如果有保证,如何决定?

对于上面的代码,我使用的是python 3.5.6,但是我对python 3.x的通用答案(如果存在)感兴趣。

鲁迪·韦尔特威斯

对于相对简单的浮子,数值精度足以准确地表示它们

并不是的。是的,可以确切表示17.5,因为它是2的幂的倍数(准确地说是2 -1的倍数)。但是,即使像0.1这样非常简单的浮点数也无法精确表示。在此取决于浮点转换例程的文本,以获取尽可能接近的表示形式。

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

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


FWIW网站Exploring Binary(无隶属关系,我只是一个忠实拥护者)上有许多关于此主题的文章。显然,它并不像预期的那么简单。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章