简介:本文的首席执行官注释将介绍Python浮点的相关内容。我希望这对每个人都会有所帮助。让我们来看看。
在计算机的硬件中,浮点数由二进制小数表示。
[python]查看普通副本
0.125
您可以看到1/10+2/100+5/1000,就像二进制十进制的方式相同
[python]查看普通副本
0.001
您可以看到0/2+0/4+1/8。
这两个小数的实际值是相同的。唯一的区别是0.125是十进制表示,而0.001是二进制表示。不幸的是,大多数小数无法通过二进制小数准确地表示,您输入的小数浮点数只能由二进制表示,只能用二进制表示。存储在机器中的浮点。不管您使用多少二进制数,小数0.1不能准确地用二进制十进制代表。这是一个无限的重复小数小数
[python]查看普通副本
0.000110011001111001100110011001100110011001110011 ...
在运行Python的典型计算机中,浮点数的准确性为53位,因此小数为0.1将以以下形式存储
[python]查看普通副本
0.0001100110011001100110011001110011001100111101010
实际上,我们很容易忘记存储存储的数据是原始十进制的近似。
[python]查看普通副本
0.10000000000005555115123125780211815834541015625
这些数字中的大多数不会被人们使用,因此Python仅显示其四所房屋和五个入口的价值
[python]查看普通副本
0.1
在实际情况下,有许多这样的例子可以解释:
[python]查看普通副本
0.1+0.2
0.300000000000004
[python]查看普通副本
回合(2.675,2)
2.67
您可以使用小数模块查看准确的浮点的值。
[python]查看普通副本
从小数进口小数
十进制(2.675)
小数('2.674999999999999982364316059749495321893310546875')))
只有一种类型的Python本机浮点,称为float,大小为24个字节(我在这里是python3.6,其他版本尚不清楚),这是双重准确性(您播放了一个特别长的小数号,最后,最后一个版本最终它将为您邀请您有效的15-16位,这是双精度浮点数的典型功能),无论浮点数有多短
Python与其他语言不同。每个变量都是一个对象,并且对象具有各种混合属性方法,因此内存职比其他语言要大得多
如果您想占据较小的内存并使用单个精度的需求,建议使用第三方库(例如Numpy)来提供可变类型大小的控制。
这主要是因为浮点的数量实际上保留在计算机中的计算机中,有些则不准确。
0.1是十进制。被转变为二进制后,它是无限数量的循环:
0.0001100110011001100110011100111001110011001100110011001100.SesseSsessenceSessessence
Python保留了双准确度(64)位,并且将切断额外的位,因此您可以看到0.1,但是计算机上的实际保留不准确0.1。
一些小数是理性的,在转换为二进制后的64位以内,因此精确保存在计算机上。在这些小数参与其中之后,结果通常将非常准确,您不会说。
浮点的数量非常复杂。这些也是我以前检查信息的记录。您可以自己去Google。
01
“将Python中浮点数的操作精度的准确性限制为32位?”
为什么问这样一个奇怪的问题。存在是合理的~~
提出此问题的原因是,当使用Python在32位MCU上模拟程序时,两者的结果是不同的。
区别在于这一观点,我将找到一种挖掘方法的方法。确定其他可能性的所有可能性,即计算准确性的影响。
MCU的浮动点操作单元为32位,而Python的默认浮点操作为64位(安装64位安装程序包)
浮动点操作的结果如下:
32位浮动点的有效数据位为7位,而上述计算结果显然超过7位。
02
差异已经很明显,因此如何消除这种差异~~
选项一:
使用Round()控制准确性。
不,单个精度和双准确浮点 - 点操作之间的差异超过一个弹性功能,并且有超过800 ~~
选项II:
使用小数模块
这仍然是我的学习计划~~
第三个解决方案:
stackoverflow.com
问题解决了~~
03
使用Numpy模块中的Float32完美解决此问题。
例如~~
结尾
结论:以上是首席CTO注释引入的Python浮动点数的所有内容。我希望这对每个人都会有所帮助。如果您仍然想进一步了解这一点,请记住要收集对该网站的关注。