2012-03-24 15 views
3

Könnte jemand erklären, wie Rechner (wie Casio Pocket) Gleichungen wie "500/12" verwalten und als Ergebnis "125/3" zurückgeben können, alternativ kann jemand einige Algorithmen benennen, die das tun?Wie vereinfachen Taschenrechner Brüche und behalten ungenaue Zahlen als Brüche?

Mit ungenauen Zahlen meine ich Zahlen, die nicht in einer festen Anzahl von Dezimalstellen wie 0,333 wiederkehrend dargestellt werden können.

Windows-Rechner ist in der Lage, dies zu demonstrieren, wenn Sie '1/3' ausführen, erhalten Sie '0,33333333333333333' als Antwort, aber wenn Sie dies mit 3 multiplizieren, werden Sie wieder bei '1' ankommen.

+3

Man hält nicht einfach .... ungenaue Zahlen als Brüche. corsiKa

+0

Windows-Rechner tut nichts Besonderes - es ist einfach der Fall, dass das Ergebnis ausreichend nahe bei 1 ist, dass es in einer IEEE-Gleitkommazahl auf 1 gerundet wird. –

Antwort

1

My HP Fraktion Anzeige Lassen Sie uns stellen Sie verschiedene Modi für Bruchanzeige:

  • einen maximalen Nenner ein. Der angezeigte Bruch ist n/d, der dem internen Fließkommawert am nächsten liegt, ohne dass das d das Maximum überschreitet. Wenn das Maximum beispielsweise auf 10 festgelegt ist, ist die Gleitkommazahl für pi dem Bruch 22/7 am nächsten. Wenn das Maximum jedoch 1000 ist, ist der nächste Bruchteil 355/113.

  • Stellen Sie einen genauen Nenner ein und reduzieren Sie das Ergebnis. Der angezeigte Bruch ist der n/d, der dem internen Gleitkommawert am nächsten ist, wobei d gleich dem genauen Nenner ist. Nach Berechnung von n wird die Fraktion dann um den größten gemeinsamen Nenner reduziert. Wenn der Nenner beispielsweise auf 32 festgelegt ist, ist die Gleitkommazahl 0,51 am nächsten bei 16/32, was auf 1/2 reduziert wird. In ähnlicher Weise ist die Gleitkommazahl 0,516 17/32 am nächsten, was nicht reduzierbar ist.

  • Stellen Sie einen genauen Nenner ein und reduzieren Sie das Ergebnis nicht. Zum Beispiel wird 0,51 als 16/32, ein nichtreduzierter Bruch, gezeigt.

Der Algorithmus für den Ansatz mit maximalem Nenner verwendet continued fractions. Ein einfach zu befolgendes Beispiel in Python finden Sie in der Methode limit_denominator unter http://hg.python.org/cpython/file/2.7/Lib/fractions.py#l206.

Die Methode für den genauen Nenner-Ansatz ist einfacher. Bei einem Nenner d und einer Gleitkommazahl x ist der Zähler nur d * x auf die nächste ganze Zahl gerundet. Reduzieren Sie dann den Bruch n/d, indem Sie die greatest common divisor.

berechnen Optional kann die ursprüngliche Gleitkommazahl durch den angezeigten Bruch ersetzt werden. Dies wird als Snap-to-Grid bezeichnet. Auf diese Weise können Sie 0,333 eingeben, um einen Bruch zu erstellen, der genau gleich 1/3 ist. Dadurch können Sie eine exakte Brucharithmetik ohne Abrundung ausführen.

Hoffe, diese Antwort klärt alles für Sie auf :-) Lassen Sie mich wissen, wenn irgendein Teil Ausarbeitung oder weitere Erklärung benötigt.

1

Ich würde vorschlagen, Sie betrachten die rational number functions der GMP-Bibliothek. Zu einem bestimmten Zeitpunkt müssen Sie bei Ihren Berechnungen eine endliche Genauigkeit akzeptieren, es sei denn, die Reihenfolge der Operationen ist besonders einfach.Die Irrationale (transzendente Funktionen/Konstanten) können nur angenähert werden, z. B. als fortlaufende Brüche.

Verwandte Themen