浮点错误?

我从来没有任何使用浮点号的电话,现在我
想要,我不能!
*** Python 2.5.1(R251:54863,2007年5月1日,17:47:05)[MSC V.1310 32
Win32上的位(英特尔). ***
0.2999999999999999
0.2999999999999999

# 回答1


不是错误.实施浮点号的所有语言都有
同样的问题.有些人只是决定向您隐藏它.请阅读http://docs.python.org/tut/node16.html,尤其是http://docs.python.org/tut/node16.ht...000000000000000000
问候,
Marek
# 回答2

rothedode*******@gmail.com写道:
曾经考虑过措辞您的实际问题,因此可以帮助您,让
独自查看档案中的许多人,许多关于此的文章
话题?
问候,
比约恩
- -
BOFH借口#66:
位桶溢出
# 回答3


丹尼斯·李·比伯(Dennis Lee Bieber)写道:
...返回('%.8f'%fpnum).rstrip('0')...
'0.3'
只是怎么了
Str(0.3)
没有什么!
感谢您指出了这一点.
# 回答4


丹尼斯·李·比伯(Dennis Lee Bieber)写道:
不,打印调用浮点类型的TP_PRINT插槽.一些核心类型
有一个特殊的打印处理程序. TP_PRINT插槽不可用
从Python代码和大多数人不知道. :]]
克里斯蒂安
# 回答5


Bruno Desthuilliers写道:
是的,您错过了第三句的开始:" TP_PRINT
插槽不可用Python Code".".
在C代码中可用,是C定义类型的一部分.因此TP_
作为类型.
在http://svn.python.org/view/python/tr...0567&view=Auto中搜索float_print和tp_print
克里斯蒂安
# 回答6


bruno desthuilliers

写道:
也许您错过了克里斯蒂安说的" TP_PRINT插槽不是
从Python代码获得"?
# 回答7


克里斯蒂安·海斯(Christian Heimes)
是的,您错过了第三句的开始:" TP_PRINT
插槽不可从Python代码中获得".
糟糕,我不好!我错过了"不"! - )
# 回答8


克里斯蒂安·海姆斯(Christian Heimes)写道:
不,打印调用浮点类型的TP_PRINT插槽.一些核心类型
有一个特殊的打印处理程序. TP_PRINT插槽不可用
从Python代码和大多数人不知道. :]]
为什么打印使用tp_print插槽,而不是str()?是两个
有效多余?如果(非repr)字符串表示为
给定类型经常需要,可以将str()实现为
通过C语言扩展名参考TP_SLOT?
# 回答9


En Thu,2008年2月14日15:22:41 -0200,Jeff Schwab
escribió:
为什么打印使用tp_print插槽,而不是str()?是两个
有效多余?如果(非repr)字符串表示为
给定类型经常需要,可以将str()实现为
通过C语言扩展名参考TP_SLOT?
附带说明,打印语句具有五个相关的opcodes.好像
印刷被认为是非常重要的操作. .
- -
Gabriel Genellina
# 回答10


我确实尝试过搜索,但我从未找到我想要的东西.这个
线程非常有用和信息丰富.谢谢你的一切
帮助!我能够解决我的问题. :)
# 回答11


Jeff Schwab

为什么打印使用tp_print插槽,而不是str()?是两个
有效多余?如果(非repr)字符串表示为
给定类型经常需要,可以将str()实现为
通过C语言扩展名参考TP_SLOT?
仅在打印到C文件描述符时,仅使用TP_PRINT插槽.在
大多数使用它的情况只是复制str和reter
功能,但避免在内存中构建整个输出.它也是
取一个标志参数,指示其应输出str还是reter,
后者在呈现对象内的内容(例如
dict或列表.
因此,例如,dict的reper构建了一个包含每个列表的列表
键/值对,然后使用逗号分隔符加入列表.这
tp_print简单地输出'{',然后使用tp_print输出
使用适当的分离器的钥匙和值代码,最后
关闭'}'.如果更换单个的输出,这不会让我感到惊讶
大字符串带有许多小调用,可以慢慢来X'
而不是"打印str(x)".

# 回答12


这是一个误解.十进制模块具有不同的碱基(10
小数(" 0.999999999999999999999999999999")
当然,你开玩笑.您的示例精确到28位.您的尝试
诀窍是使用一个永不结束的数字(1/3 = 0.3333 ...).它会
只有在有无限数量的情况下,仅转换回一个
重要的数字.这与Python小数无关
模块(执行声称的内容).这是一个特质之一
基本10号系统的.请记住,我们正在使用基本10
小数而不是分数.
# 回答13


Zentrader写道:
小数(" 0.999999999999999999999999999999")

当然,你开玩笑.您的示例精确到28位.您的尝试
诀窍是使用一个永不结束的数字(1/3 = 0.3333 ...).它会
只有在有无限数量的情况下,仅转换回一个
重要的数字.这与Python小数无关
模块(执行声称的内容).这是一个特质之一
基本10号系统的.请记住,我们正在使用基本10
小数而不是分数.
Diez并没有声称该小数模块所做的事情少于
它承诺的.他只是指出该模块不支持
无限精确的浮点算术,比传统更多
基本2表示.请查看线程(您的零件
剪切)进行澄清.

# 回答14


我不同意 这个说法
但这并没有改变它会暴露相同的事实
如浮子所做的圆形 - 仅适用于不同的数字.

所使用的示例没有舍入错误.少于28
大量数字可循环到1.0.浮子1.0/3产量
0.333333333333333331 < - 在我的机器上.您也可以比较两个
DECIMAL.DECIMAL()对象的平等对象.使用花车,您必须测试
差异小于一些小价值.顺便说一句,大学教授
他还为谋生而写的代码使这个副手的言论"总的来说
最好先乘,然后分割."好的一般建议.
# 回答15


2月15日,3:30*pm," Diez B. Roggisch" 这个"十进制是确切的"神话经常出现,我
想知道是否值得在
文档.
标记
# 回答16


所有这些问题都会带来浮点,这是一个合理的理由
在Python或PY3K中添加合理数字支持? (双关语不打算)
我同意,有些数字是理性的
(例如pi,phi,e)但是这些舍入的问题也存在于浮动中
要点,理性数字不会被某件事愚弄
像1/3 * 3一样,1/10(计算机)正好是0.1(人).首先
理性的问题是,要获得无限的精确性理性,
该语言必须具有无限的整数,
Python给了我们.理性的第二个问题是保持
理性的最简单,最琐碎的形式.这可以通过
GOD GCD算法,这也可能是Python的数学的不错的补充
图书馆.
# 回答17


谎言写道:
http://www.python.org/dev/peps/pep-0239/
# 回答18


2月17日,1:40*am,jeff schwab http://www.python.org/dev/peps/pep-0239/
是的,我知道PEP,实际上已经尝试了一段时间
重新打开PEP.
PEP被拒绝的原因是因为接受了小数,
我认为是一个完全荒谬的原因,因为十进制实际上不是
解决舍入问题和平等比较问题.一些
人们还指出,小数是不确定的,而理性的
数字始终是确切的,除非您有一个(二进制的操作)
或小数)涉及的浮点(这可以通过
使分数隐性,即接受分数的操作
浮子应返回浮子).
# 回答19


2月16日,1:35*pm,撒谎 它已经在后备箱中了! Python将具有合理类型(称为
分数)在Python 2.6和Python 3.0中,这在很大程度上要归功于
杰弗里·Yaskin.
标记
# 回答20


2月16日,1:35*pm,撒谎 忘了给出链接:http://docs.python.org/dev/library/fractions.html
标记
# 回答21


2月16日,12:35页,撒谎 你看过gmpy madule吗?这就是我
每当这个c时使用 提高.工作非常好
消除阻止浮点的问题
对于我正在努力的问题.
有些非理性可以用infite表示
理性的序列,再加上gmpy的
无限的精密浮子,允许任意数量
准确的十进制位置要计算.
如果您想看一个示例,请访问http://members.aol.com/mensanator/polynomial.py(_@_ _)
2月16日,下午3:03,撒谎 也许对您的用例确实如此,但是在大多数情况下都是如此
一般来说.
对于几乎所有扩展计算,理性是毫无用处的,
由于分母趋向于生长,直到实际
Unusbale,这意味着您必须定期进行非削减减少
为了保持运行,如果您这样做,您也可能会使用
浮点.
理性偶尔有特殊用途,但对于大多数
案例充其量比漂浮的略微好转,而且更频繁
无与伦比的更糟.
卡尔银行
# 回答22


2月17日,4:25*上午,卡尔银行 也许对您的用例确实如此,但是在大多数情况下都是如此
一般来说.
好的,这可能是一个夸大的陈述,但是正如我所看到的那样,
与浮子相比,更安全地处理分数的东西
为什么我会尽可能在非计算机数学中使用分数).
如果要成为同一变量,理性不是那么好
由于其增长而一次又一次地计算,但是有很多
在数据仅需要五个或六个左右的情况下
对此进行了操作(并且有数千或数百万的此类
数据),理性是这些情况的理想选择,因为
由于比较安全性,它更容易使用.或在
速度不那么重要和准确性的情况,
分数可能比十进制更快,同时更准确
(虽然有人需要测试).
# 回答23


卡尔·班克斯(Carl Banks)写道:
也许对您的用例确实如此,但是在大多数情况下都是如此
一般来说.
对于几乎所有扩展计算,理性是毫无用处的,
由于分母趋向于生长,直到实际
Unusbale,
您的意思是"几乎无法使用"?我听到了类似的论点
对大整数制作("原始类型通常是大型的)
足够了,为什么要冒险表现?")但是当我的时候我爱上了他们
首先在Smalltalk中看到了它们,我很高兴Python本地支持他们.
# 回答24


2月16日,下午5:51,Jeff Schwab 您的意思是"几乎无法使用"?我听到了类似的论点
对大整数制作("原始类型通常是大型的)
足够了,为什么要冒险表现?")但是当我的时候我爱上了他们
首先在Smalltalk中看到了它们,我很高兴Python本地支持他们.
# 回答25


2月14日,晚上8:10,Zentrader 小数(" 0.999999999999999999) 99999999")

当然,你开玩笑.
他根本不开玩笑.
它确实以3、6、9、12的基础结束.
您必须记住,没有选择碱,因为它有
与其他基础相比的数学优势,但仅仅是因为人们
指望他们的手指.鉴于这个事实,为什么是五分之一
比三分之一的更准确的代表权更值得?

# 回答26


2月17日,下午1:45,撒谎 错误的.加法和减法只会增加分母
一定限制
我说重复的加法和分裂.
无论如何,加法和减法可以大量增加分母
如果由于某种原因您输入了许多不同的数字
分母.
卡尔银行
# 回答27


2月18日,1:25*下午,卡尔银行 我说重复的加法和分裂.
重复的添加和减法无法使分数增长
无限,只有乘法和划分才能.
达到一定限制.达到极限后,分数将
始终可以简化.
如果输入分子和分母具有定义的限制,请重复
另一个分数的加法和减法也将有一个定义
限制.
# 回答28


>
在唐纳德·诺斯(Donald Knuth)的《计算机编程艺术》中,他描述
浮动斜线算术,其中的总数
分子和分母是有界的. IIRC,用例是矩阵
反转.
casevh
# 回答29


谎言写道:2008年2月24日在阳光下,11:09:32 -0800写道:
您确实意识到,通过对分母限制,您可以保证
分数的总和还对分母有限制?在
换句话说,您的"测试"是没有用的.
分母限制为1至9(包含在内),总和将有一个
2*3*5*7 = 210的分母.但是该限制是一种产品(从字面上看和
图像)您对分母的人为限制.添加分数
使用分母11,总和现在有一个分母为2310;添加
另一个n/13,总和为m/30030;等等.
- -
史蒂文
# 回答30


2月24日,4:50页,史蒂文·d'Aprano cybersource.com.auwrote:
您确实意识到,通过对分母限制,您可以保证
分数的总和还对分母有限制?在
换句话说,您的"测试"是没有用的.
分母限制为1至9(包含在内),总和将有一个
2*3*5*7 = 210的分母.
限制将为2*2*2*3*3*5*7.正如医学博士所说:"等同于
所有Primes P <= n的最高功率的产品
p不超过n.
# 回答31


Mensanator写道:
出于好奇心,分母限制的用途是什么?
我必须使用理性的问题
从来没有给我这么奢侈,所以我看不到什么
你的意思是.
在仅处理选定单位的计算中:美元
以及美分,磅,盎司和吨,茶匙,加仑,啤酒瓶
28案,然后这些分母会解决相当的问题 伊克.
总的来说,数学不是.
我认为这可能是重点.
梅尔.
# 回答32


2月24日,6:09*pm,mel 在仅处理选定单位的计算中:美元
以及美分,磅,盎司和吨,茶匙,加仑,啤酒瓶
28案件,然后这些分母很快就会解决.
好的.
但这并不意味着它们变得比
其他无限的精度用法.你看到我的例子了吗
使用牛顿的正向差异的多项式查找器
方法?分母的肯定不会安定下来,也不是
它们变得难以管理吗?这是一般数学.
如果要点像SDA所建议的,那么16/16之类的地方
有可能,我明白了.正如gmpy证明thouigh的那样
这样的问题是没有发生的.没有
假设python本地理性类型的理由是
愚蠢地实施了吗?
# 回答33


2月24日,晚上7:56,Mensanator 由于您期望与无限制一起工作(或至少,非常
高精度,那么理性的行为并不奇怪.但
当运行时间进行计算时,幼稚的用户可能会感到惊讶
根据数字的值而变化很大.相反,
标准二进制浮点操作的运行时间相当
持续的.
在当前版本的GMP中,计算的运行时间
最大的常见除数是O(n^2).如果您包括减少
最低术语,有理添加的运行时间现在为o(n^2)
而不是用于高精度浮点添加或O(1)的O(n)
对于标准的浮点添加.如果您需要确切的理性
答案,那么运行时间的变化就可以了.但是你不能只是
使用理性并期望持续的运行时间.
IEEE-754二进制,十进制和理性之间存在权衡取舍
算术.他们都有适当的问题域.
有时您只需要无限的精度,radix-6,定点
算术....
casevh
# 回答34


在2月24日,下午12:32,撒谎 重复的添加和减法无法使分数增长
无限,只有乘法和划分才能.

您不了解"重复的加法和分裂"的哪一部分?
卡尔银行

# 回答35


2月24日,晚上10:56,Mensanator 不,这是一种特定的算法.某些随机算法没有
将分母炸毁到磁盘撞击点并不意味着
他们一般不会.
尝试与理性进行数值集成,并告诉我
如何工作.尝试计算复合兴趣和存储
每月1000个客户的结果,并比较您的大小
数据库之前和之后.
卡尔银行
# 回答36


卡尔银行 通常,您会在存储在
数据库.
# 回答37


2月25日2:0 Paul Rubin 4 AM 通常,您会在存储在
数据库.
我将其作为假设,而不是真实的例子.
"这就是为什么我们(通常)不使用理由进行会计的原因."
卡尔银行
# 回答38


如果您对理性感兴趣,那么您可能想看看
在MXNUMBER,是Egenix MX实验的一部分
发行:http://www.egenix.com/products/pytho...ntal/mxnumber/
它提供基于GNU MP的快速理性操作
图书馆.
卡尔·班克斯(Carl Banks)在2008-02-25 07:58写道:
不,这是一种特定的算法.某些随机算法没有
将分母炸毁到磁盘撞击点并不意味着
他们一般不会.
尝试与理性进行数值集成,并告诉我
如何工作.尝试计算复合兴趣和存储
每月1000个客户的结果,并比较您的大小
数据库之前和之后.
在存储之前很可能限制分母
在数据库或其他外部资源中使用Farey邻居:http://en.wikipedia.org/wiki/farey_s...rey_neighbours
MXNUMBER实现此算法(不是最有效的
一个,但效果很好).
- -
马克·安德烈·伦堡
egenix.com
直接来自来源的专业Python服务(2008年2月25日,#1)
______________________________________________________________________________________________________
::::尝试MXODBC.ZOPE.DA Windows,Linux,Solaris,MacOSX免费! ::::
egenix.com软件,技能和服务GmbH Pastor-Loeh-Str.48
D-40764德国Langenfeld.首席执行官大队.马克·安德烈·伦堡
在Amtsgericht Duesseldorf注册:HRB 46611
# 回答39


保罗·鲁宾(Paul Rubin)写道:
通常,您会在存储在
数据库.
在某些情况下,法律需要更高的精度或
舍入必须是地板或...
有些事情没有意义,在处理金钱时,事情变得更少
要么保护客户或授予国家
交易的份额.
例如,在巴西的这里,加油站必须以3的价格显示价格
十进制数字和最终结果(IIRC).填充的卡车117
每升1.239的升升开始弄乱...如果所有者想要
跟踪由于四舍五入或他想库存而导致的"损失"
准确的燃料,他将无法保存他向客户支付的收费
否则,到本月底的情况将不符.
# 回答40


2月25日,12:58 hom,卡尔银行 不,这是一种特定的算法. •一些随机算法没有
将分母炸毁到磁盘撞击点并不意味着
他们一般不会.
尝试与理性进行数值集成,并告诉我
如何工作. - ½TRY计算复合兴趣和存储
每月1000个客户的结果,并比较您的大小 r
数据库之前和之后.
没有人说理性是适当的解决方案
到_every_问题,就像浮标和整数不是
_every_问题的适当解决方案.
您的论点是我应该被迫使用
当理性_are_时,不合适的类型
适当的解决方案.
我从未使用过小数类型,但我不是
要求拆除它,因为我知道
有用的情况.如果理性类型是
补充说,没有人会强迫您将其用于
数值集成.
# 回答41


丹尼斯·李·比伯(Dennis Lee Bieber)在2008年2月24日在阳光下23:41:53 -0800写道:
告诉您在洛克希德的工资单处理...我的薪水
随着数据库显然携带
至少为0.001分辨率,仅在分发时进行四舍五入
在薪水本身的各种税收中.乏味的数据输入
加快我必须继续调整各种税收条目,+/-一分钱
每周.

"最糟糕的练习"行动 *眨眼 *
我预测他们正在使用一些时髦的内部会计软件
数十年来,已向一家咨询公司(SAP?)支付了数百万美元
有些人知道很多COBOL但没有会计的人,以及内部
数据类型是浮点.
[狙击]
会计标准确实根据上下文有所不同:例如我看到
澳大利亚官方政府的官方报告标准是报告
以数百万美元的价格到一个小数点.会计师可以
只要他们告诉
你.我找到了一个非常狡猾的例子:
" MFS水基金ARSN 123 123 642(基金)是注册的托管
投资计划. ... MFS Aqua可能会将发行价格计算为
它确定的小数位数."
听起来像是使用本地浮标的另一个地方.但这一切都高于董事会
因为他们告诉您他们将使用任意数量的小数位置,所以
亲爱的,最好把审计师混淆.
- -
史蒂文

# 回答42


卡尔·班克斯(Carl Banks)在2008年2月24日23:09:39 -0800上写道:通常,您会在TheDatabase存储之前到最近的一分钱.

我将其作为假设,而不是真实的例子.
"这就是为什么我们(通常)不使用理由进行会计的原因."
但是由于会计师(通常)到最接近的一分钱,会计是
一个 *好 *理性的用例.十进制可能更好,但是漂浮物是
最糟糕的.
我想知道为什么您正在与理由进行数值集成
第一名?您是学会的ABC用户之一(例如Guido)
害怕有理由,因为ABC没有浮子?
- -
史蒂文

# 回答43


在2008-02-25 16:03,史蒂文·达·阿普拉诺(Steven D'Aprano)写道:
我将其作为一个假设,而不是真实的例子."这就是为什么我们(通常)不使用理性来进行会计的原因."

但是由于会计师(通常)到最接近的一分钱,会计是
一个 *好 *理性的用例.十进制可能更好,但是漂浮物是
最糟糕的.
总体上不一定是正确的:财务 乳房通常会尝试
始终以最佳的精度进行计算
在计算的末尾应用舍入.大多数时候浮动
是最佳数据类型.
会计使用一种有些不同的方法,而一种不同的方法
在不同的会计标准和用例之间.小数
类型通常更适合于此,因为它支持各种
四舍五入的方式.
理性并不总是最好的选择,但它们确实有帮助
如果您需要保证所有部分的总和
对于所有值,等于整体.与间隔结合
算术它们在更准确的计算方面走了很长一段路.
- -
马克·安德烈·伦堡
egenix.com
直接来自来源的专业Python服务(2008年2月25日,#1)
______________________________________________________________________________________________________
::::尝试MXODBC.ZOPE.DA Windows,Linux,Solaris,MacOSX免费! ::::
egenix.com软件,技能和服务GmbH Pastor-Loeh-Str.48
D-40764德国Langenfeld.首席执行官大队.马克·安德烈·伦堡
在Amtsgericht Duesseldorf注册:HRB 46611

# 回答44


2月25日,上午9:41,Mensanator 没有人说理性是适当的解决方案
到_every_问题,就像浮标和整数不是
_every_问题的适当解决方案.
我正在回答您的主张,即理性适合一般
数学用途.
我不知道你从哪里得到这个主意.
我的论点是,理性不适合普通用途
因为他们的性能差,并且可以轻松地炸毁
面对,丢弃磁盘并崩溃您的程序(如果
您在Windows上).
换句话说,python中的3/4正确地产生了浮点
合理的.
卡尔银行
# 回答45


在2008-02-25,卡尔银行 除非您在营地中认为3/4应该会产生
整数0;)
- -
格兰特·爱德华兹·格兰特·尤! Zippy的脑细胞
在桥梁
visi.com突触...
# 回答46


格兰特·爱德华兹(Grant Edwards)写道:
除非您在营地中认为3/4应该会产生
整数0;)
不,那不是理性的;-)
- -
史蒂夫·霍顿+1 571 484 6266 +1 800 494 3119
Holden Web LLC http://www.holdenweb.com/
# 回答47


在周一,2008-02-25,16:27 +0000,格兰特·爱德华兹(Grant Edwards)写道:
除非您在营地中认为3/4应该会产生
整数0;)
我在营地中认为3/4确实会产生整数0,
但应在意图时拼写3 // 4.
干杯,
悬崖
# 回答48


2月25日,上午11:34,casevh 由于您期望与无限制一起工作(或至少,非常
高精度,那么理性的行为并不奇怪.但
当运行时间进行计算时,幼稚的用户可能会感到惊讶
根据n的值而变化很大 Umbers.相反,
标准二进制浮点操作的运行时间相当
持续的.
在当前版本的GMP中,计算的运行时间
最大的常见除数是O(n^2).如果您包括减少
最低术语,有理添加的运行时间现在为o(n^2)
而不是用于高精度浮点添加或O(1)的O(n)
对于标准的浮点添加.如果您需要确切的理性
答案,那么运行时间的变化就可以了.但是你不能只是
使用理性并期望持续的运行时间.
IEEE-754二进制,十进制和理性之间存在权衡取舍
算术.他们都有适当的问题域.
我非常同意这一说法.分数确实有弱点,
小数和硬件浮点也是如此.他们有自己的
用法,他们自己的场景适当.如果需要
全速计算,很明显,浮点胜过
这个地方,OTOH,如果您需要仔细管理精度
分数和十进制都有自己的加号和分钟

标签: python

添加新评论