python– 浮点随机(?!)精确怪癖

python– 浮点随机(?!)精确怪癖,第1张

概述参见英文答案 > Is floating point math broken?                                    28个>            Why do simple math operations on floating point return unexpected (inaccurate) resu

参见英文答案 > Is floating point math broken?                                    28个
>            Why do simple math operations on floating point return unexpected (inaccurate) results in VB.Net and Python?                                    4个
我刚开始学习python,我偶然发现了一个特殊性

python版本:

Python 2.7.2 (default,Jul 20 2011,02:32:18) [GCC 4.2.1 (LLVM,
Emscripten 1.5,Empythoned)] on linux2

上:http://repl.it/languages/Python

使用解释器分配:

    pi = 3.141 // 3 places decimal precision    #tyPing pi  & pressing return puts 3.141   type(pi)=> 

好的浮点精度因为不精确而臭名昭着;
但为什么只有4点精度得到那个“尾巴”呢?

也:

 pi2 = 3.1415100000000002 pi == pi2 # pi was assigned 3.1415 => True print(pi2) 3.14151 # Where's my precision? 
最佳答案整数和浮点数被赋予一定的位数.对于整数,每个位对应于2的幂.第一个数字是20,然后是21,22,依此类推.所以要存储整数5,我们有20 22 = 1 4.

对于浮点数,我们将它们分为两部分.指数和小数.如果我们的小数为.75且指数为2,我们的确为.75 * 102 = 7.5.小数存储为2的负幂.所以我们有2-1,2-2. 2-3.等等于.5,.25,.125等.

有些数字是不可能存储的,因为它们确实需要无限位来表示,如0.1,而其他像3.1415这样需要比cpu提供的浮点数更多的位数(24是32位浮点数的标准,但算法不同).

比较浮点数的正确方法是定义方差,并沿着这些线使用某些东西.

variance = .0001floatsEqual = lambda f1,f2: f1 - variance <= f2 and f1 + variance >= f2if (floatsEqual(3.1415,3.1415 + 1 - 1)):    pass

在Python中,十进制库也很有用. 总结

以上是内存溢出为你收集整理的python – 浮点随机(?!)精确怪癖全部内容,希望文章能够帮你解决python – 浮点随机(?!)精确怪癖所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/1205296.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-04
下一篇 2022-06-04

发表评论

登录后才能评论

评论列表(0条)