简介:今天,首席执行官指出,要与您分享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')))
这主要是因为浮点的数量实际上保留在计算机中的计算机中,有些则不准确。
0.1是十进制。被转变为二进制后,它是无限数量的循环:
0.0001100110011001100110011100111001110011001100110011001100.SesseSsessenceSessessence
Python保留了双准确度(64)位,并且将切断额外的位,因此您可以看到0.1,但是计算机上的实际保留不准确0.1。
一些小数是理性的,在转换为二进制后的64位以内,因此精确保存在计算机上。在这些小数参与其中之后,结果通常将非常准确,您不会说。
浮点的数量非常复杂。这些也是我以前检查信息的记录。您可以自己去Google。
只有一种类型的Python本机浮点,称为float,大小为24个字节(我在这里是python3.6,其他版本尚不清楚),这是双重准确性(您播放了一个特别长的小数号,最后,最后一个版本最终它将为您邀请您有效的15-16位,这是双精度浮点数的典型功能),无论浮点数有多短
Python与其他语言不同。每个变量都是一个对象,并且对象具有各种混合属性方法,因此内存职比其他语言要大得多
如果您想占据较小的内存并使用单个精度的需求,建议使用第三方库(例如Numpy)来提供可变类型大小的控制。
这是浮点误差。由于计算机使用32位来指示浮点的数量,其准确性受到限制。十进制十进制7.77时(因为相应的二进制十进制为无限长),它将变得较小。
01
“将Python中浮点数的操作精度的准确性限制为32位?”
为什么问这样一个奇怪的问题。存在是合理的~~
提出此问题的原因是,当使用Python在32位MCU上模拟程序时,两者的结果是不同的。
区别在于这一观点,我将找到一种挖掘方法的方法。确定其他可能性的所有可能性,即计算准确性的影响。
MCU的浮动点操作单元为32位,而Python的默认浮点操作为64位(安装64位安装程序包)
浮动点操作的结果如下:
32位浮动点的有效数据位为7位,而上述计算结果显然超过7位。
02
差异已经很明显,因此如何消除这种差异~~
选项一:
使用Round()控制准确性。
不,单个精度和双准确浮点 - 点操作之间的差异超过一个弹性功能,并且有超过800 ~~
选项II:
使用小数模块
这仍然是我的学习计划~~
第三个解决方案:
stackoverflow.com
问题解决了~~
03
使用Numpy模块中的Float32完美解决此问题。
例如~~
结尾
浮点是数据类型。
浮动 - 点数据类型,浮点数据类型用于存储单个精度浮动 - 点或双 - 精确浮点-Point Numbers.Poploating Point数字使用IEEE(电气和电子工程师协会)格式。浮动的单个精度值 - 点类型有4个字节,包括一个符号,一个8位二进制索引和一个23位尾巴。
由于尾巴的高水平顺序始终为1,因此不以数字形式存储。此形式提供约-3.4e+38?3.4e+38的范围。
扩展信息:
相关用法
存储的尾部数量大于或等于1,小于2。对于浮动和双重类型,有一个隐式前指南1处于最大有效位置。这样,即使最大有效位永远不会存储在内存中,尾巴的数量实际上是24和53。
浮动 - 点包可以将二进制浮点数存储为非标准数字,而无需使用刚刚引入的存储方法。“非标准数字”是无-Zero -Zero -Zero -Zero -Zero -Zero -Zero -Zero -Zero -Zero -Zero -lodling点,其保留索引值是该值的最高有效位,其中最高有效位尾号为0。
通过使用非标准格式,可以扩展浮动点号的范围,但精度将丢失。您无法控制标准化或非标准化形式形式的浮动点数量;浮动 - 点软件包确定表示形式。
用法
如果存储比准确性更重要,请考虑使用浮动类型进行浮动 - 点变量。instead,如果准确性是最重要的条件,请使用双重类型。
浮动 - 点变量可以增加到更大的基本类型(从浮点类型到双重类型)。当您在浮动时执行算术 - 点变量时,它通常会改善。此算术始终以与变量相同的高精度,与该变量相同最高精度。例如,请考虑以下类型声明:
float f_short;双f_long;长f_longer;f_short = f_short * f_long;
在上一个示例中,变量f_short被升级为双重型,并乘以f_long;然后,将结果给出到float类型,然后给予f_short。
参考信息来源:Baidu百科全书流动
结论:以上是首席CTO注释为每个人编制的Python浮动点的所有内容。感谢您阅读本网站的内容。我希望它对您有所帮助。