Floating point Python float为什么不解释精度?

Floating point Python float为什么不解释精度?,floating-point,decimal,python-3.5,Floating Point,Decimal,Python 3.5,关于浮点数学。2017年是否有可能重新设计计算机/标准,以便 --int(x) --十进制(固定位置,无轨迹x.x或x.xxn)((同时我在下面的答案中创建了一个hack)) --浮动(此处允许轨迹,如同浮动的深奥本质一样x.n?) 下面是我写的原始文本和一段涉及浮点运算的视频: 我正在编写一个迭代器,它将从0.0循环到3.0 i = 0.0 while i < 3: do something with i i += 0.2 数字变得更糟 Python是否会疯狂(e)正确解释0.

关于浮点数学。2017年是否有可能重新设计计算机/标准,以便

--int(x

--十进制(固定位置,无轨迹x.x或x.xxn)((同时我在下面的答案中创建了一个hack))

--浮动(此处允许轨迹,如同浮动的深奥本质一样x.n?

下面是我写的原始文本和一段涉及浮点运算的视频:

我正在编写一个迭代器,它将从0.0循环到3.0

i = 0.0
while i < 3:
  do something with i
  i += 0.2
数字变得更糟

Python是否会疯狂(e)正确解释0.2增量就意味着0.2增量,而不是更长的小数?我的意思是在int和float之间有什么东西能起作用,而decimal不能。或者我在学校被错误地教导说0.1实际上意味着0.1000009?

编辑:下面的“解决方案”在经过多次测试之前似乎是一个解决方案。这和正常的浮动一样糟糕

OLD:我已经做了一个hack…..它“工作”并且能够缩小到程序员愿意承受嵌套while循环的程度。我称之为嵌套整数十进制方法或飞行驴子

例如:

while a1 < 3:
  b2 = 0
  while a2 < 10:
    b = str(a1)+'.'+str(a2)
    do stuff including float(b)
    a2 += 1
  a1 += 1
而a1<3:
b2=0
a2<10时:
b=str(a1)+'.+str(a2)
做一些事情,包括浮动(b)
a2+=1
a1+=1

Read。读得好,读得好。你再也不会质疑浮点运算了。可能的重复我可以改变这个问题,因为它看起来像是重复的。但我不满意的是,计算机没有明确的0.2十进制类型,只有表面上的精度截止。我会阅读Oracle附录,看看我是否相信状态是令人满意的。考虑有限宽度的浮点不能代表每一个被写为文本的数字。代码应该如何处理不能精确表示为float的值?四舍五入到最接近的可表示浮点数?十进制是如何让事情变得更糟的?它应该完全满足您的要求。对于范围(30):打印(i/10.0),这对您的
有什么好处?它不会给我带来任何好处。这是对浮动问题的回应。范围解决方案更好,我将使用它。飞驴是神话中的生物。@Sneftel一个问题是,据我所知,我不能从任意一点开始。如果我想从1.23456开始,做这个范围,它从1开始,而不是1.23456。如果我做一个浮动,它将是1.2345600021325或其他。我的黑客解决方案可以通过足够的努力从任意位置开始计算。只给我我想要的int和float似乎无法达到的地方。你真的需要阅读链接文章。不精确性并不是来自你认为它是从哪里来的,它实际上也不会在你的解决方案中消失。@Sneftel经过更多的修补后,我意识到它并没有做它最初表现出来的事情。但现在我意识到浮动真的非常糟糕。a=1.2345 b=0.0001表示范围(10)内的i:a+=b打印(a)您的解决方案和我的解决方案都给出了1.2348的两倍(!)
a1 = 0
a2 = 0
b = str(a1)+'.'+str(a2)
float(b)
while a1 < 3:
  b2 = 0
  while a2 < 10:
    b = str(a1)+'.'+str(a2)
    do stuff including float(b)
    a2 += 1
  a1 += 1