[Python-de] Fliesskomma-Genauigkeiten <seufz 0.9/>

Dinu Gherman gherman at darwin.in-berlin.de
Wed Apr 25 19:07:07 EDT 2001


"M.-A. Lemburg" wrote:
> 
> Das liegt daran, daß Floats (meistens) von der C lib im
> IEEE Standard verbastelt werden und der orientiert sich
> am Dualsystem und nicht dem Dezimalsystem, welches für Humanoide
> zugänglicher ist ;-)

Schon, aber warum wurden diese in 1.5.2 dargestellt und in
2.0 nicht mehr? Und sollte einem nicht folgendes zu denken
geben?

  PythonWin 2.0 (#8, Oct 16 2000, 17:27:58) [MSC 32 bit (Intel)] 
  [...]
  >>> x = 10 * 3.14
  >>> x
  31.400000000000002
  >>> x == 31.4
  0

Warum die Null? Selbst wenn es dafuer einen guten Grund gibt,
wird er schwerlich einem Anfaenger leicht zu erklaeren sein.

> Im Ernst, das ist eine FAQ und sollte eigentlich dort auch irgendwo
> stehen (ich frage mich warum Tim Peters dort noch nichts vermerkt
> hat).

Aber hallo!

Abgesehen davon finde ich es reichlich... beknackt... sich
ueber 1/2 == 0.5 auszulassen und gleichzeitig dermassen die
Leute zu verwirren. Was soll z.B. ein Schueler denken, der

  >>> 3.14
  3.1400000000000002

zu sehen bekommt, fuer den man aber extra 1/2 == 0 eliminiert
hat, damit er es *leichter* hat?

Das folgende Argument erklaert *dass*, aber nicht, *warum* man 
die Aenderung gemacht hat:

  http://www.python.org/2.0/new-python.html:

  "Taking the repr() of a float now uses a different formatting
precision
  than str(). repr() uses %.17g format string for C's sprintf(), while
str()
  uses %.12g as before. The effect is that repr() may occasionally show
more
  decimal places than str(), for certain numbers. For example, the
number 8.1
  can't be represented exactly in binary, so repr(8.1) is
  '8.0999999999999996', while str(8.1) is '8.1'."

Dinu



More information about the Python-de mailing list