Als ich das in frĂŒheren BeitrĂ€gen [1,2,3,4] begonnene Problem der Dezimalgenauigkeit mithilfe der binĂ€ren Arithmetik weiter untersuchte, konnte ich Algorithmen zur Berechnung von reellen Zahlen entwickeln, die im Format von dezimalen Gleitkommazahlen dargestellt wurden und genau das gleiche Ergebnis liefern, als ob Berechnungen wĂŒrden manuell durchgefĂŒhrt.
Diese Algorithmen verwenden binÀre Arithmetik, die durch den IEEE754-Standard geregelt wird. Um die Funktionsweise der Algorithmen zu testen, wurde ein Testprogramm in C ++ entwickelt, das einen 18-Bit-Dezimalrechner implementiert.
Da das Volumen des Materials das Format des Beitrags ĂŒberschreitet, habe ich die Hauptpunkte in Form von Abstracts dargelegt. Wir werden diesen Beitrag die Mai-Thesen nennen :(.
Also.
Es ist bekannt, dass
Dem Benutzer vertraute Arithmetik ist Dezimalarithmetik.
Es gibt auch b-ary Arithmetik, wobei b die Basis des Zahlensystems ist und einen beliebigen Wert ungleich Null annimmt [5].
Um Zahlen in verschiedenen MaĂstĂ€ben anzuzeigen, verwenden wir die Notation von Gleitkommazahlen in Form eines Produkts der Mantisse und eines beliebigen Basisgrads. Dies ist die sogenannte Exponentialschreibweise.
Wenn der Grad der Zahl fest ist und die Mantisse der Zahl eine ganze Zahl ist, wird dieses Format als Festkommaformat bezeichnet. Ein Sonderfall des Festkommaformats ist eine Zahl, bei der der Grad Null ist. Dieses Format ist ein ganzzahliges Format.
Wenn die Mantisse eine Bruchzahl im b-ary-Zahlensystem mit dem ganzzahligen Teil c †0 und c <b ist, wird eine solche Zahl als normalisiert bezeichnet.
Trotz der Tatsache, dass die Zahlen aufgrund ihrer physischen Natur ungefĂ€hr sind, handelt es sich bei einem ComputergerĂ€t um exakte Zahlen, und das GerĂ€t muss Operationen mit einer benutzerdefinierten Genauigkeit ausfĂŒhren.
Genaue Berechnungen im arithmetischen Mittel ergeben ein Ergebnis mit einer bestimmten Anzahl gĂŒltiger signifikanter Stellen nach dem Punkt [6].
Alle Berechnungen im Computer werden in binĂ€rer Form durchgefĂŒhrt. FĂŒr sie ist die Basis b = 2.
Da das BinĂ€r- und das Dezimalzahlensystem nicht konvertierbar sind, erhalten wir beim Konvertieren von reellen Dezimalzahlen in BinĂ€rcode meistens den ungefĂ€hren Wert des binĂ€ren Ăquivalents der Dezimalzahl. Daher treten beim Ăbersetzen von Dezimalzahlen in BinĂ€rzahlen Darstellungsfehler auf.
Dezimalzahlen, die das genaue binĂ€re Ăquivalent haben, werden als darstellbar bezeichnet.
Dezimalzahlen, die nicht das genaue binĂ€re Ăquivalent haben, werden als nicht reprĂ€sentativ bezeichnet.
Alle ganzzahligen Dezimalzahlen sind darstellbar, wenn die Anzahl der signifikanten Stellen in ihrem binĂ€ren Ăquivalent das Bitraster des Maschinenwortbereichs, in den sie geschrieben sind, nicht ĂŒberschreitet.
Je mehr BinĂ€rziffern das binĂ€re Ăquivalent der Zahl darstellt, desto kleiner ist der Darstellungsfehler. Dies erklĂ€rt den Wunsch, die KapazitĂ€t des Betriebsregisters des Prozessors stĂ€ndig zu erhöhen.
Jede Dezimalzahl, deren binĂ€res Ăquivalent die Anzahl der signifikanten Stellen enthĂ€lt, die das Bitraster eines Maschinenworts ĂŒberschreitet, kann nur ungefĂ€hr dargestellt werden.
Arithmetische Operationen, die zu einem Ergebnis fĂŒhren, bei dem die Bittiefe der Maschinenwortmantisse ĂŒberschritten wird, geben eine ungefĂ€hre Zahl zurĂŒck.
UngefÀhre Zahlen können wahre, zweifelhafte und falsche Zahlen enthalten.
Falsche Zahlen in den Berechnungen beeintrĂ€chtigen die Genauigkeit und können manchmal zu völlig falschen Ergebnissen fĂŒhren [3].
In Ăbereinstimmung mit der Theorie der ungefĂ€hren Berechnungen werden ungefĂ€hre Zahlen gerundet, um falsche Ergebnisse zu erhalten, um falsche Zahlen auszuschlieĂen [6].
Die Genauigkeit, die der Benutzer bei den Berechnungen wĂŒnscht oder erhalten kann, wird durch die Anzahl der gĂŒltigen Ziffern bestimmt, die der Berechnungsalgorithmus bereitstellt.
Jede BinÀrzahl kann auf die angegebene Anzahl von BinÀrziffern gerundet werden, wobei zusÀtzliche Bits verworfen werden.
Ebenso kann jede Dezimalzahl auf die erforderliche Anzahl von Dezimalstellen gerundet werden, wobei zusÀtzliche Ziffern verworfen werden.
Sie können zusĂ€tzliche BinĂ€rziffern in einer BinĂ€rzahl nicht einfach verwerfen, um das DezimalĂ€quivalent auf eine bestimmte Anzahl von Dezimalstellen zu runden, da durch Verringern der Bittiefe des BinĂ€rĂ€quivalents einer Dezimalzahl die Anzahl der ungĂŒltigen Ziffern in der Dezimalzahl erhöht wird.
Jede reelle Zahl, die in Form eines Dezimalbruchs ausgedrĂŒckt wird, kann prĂ€zise im Format einer Gleitkommazahl (TFT) dargestellt werden, bei der die Mantisse eine ganze Zahl ist. Der Aussteller auf der NTC gibt die Position des Punktes in dieser Nummer an.
Wenn die Zahl im Format eines NTC mit einer ganzzahligen Mantisse dargestellt wird, können die Mantisse und der Exponent dieser Zahl genau in BinÀrcode konvertiert werden.
Neu
Ein Format, in dem die dezimale TNT-Mantisse durch das binĂ€re Ăquivalent der dezimalen ganzzahligen Mantisse dargestellt wird und der Exponent das binĂ€re Ăquivalent der Potenz von 10 (Basis b = 10) ist, wird als gemischtes dezimal-binĂ€res Format (SDDF) bezeichnet.
Der Unterschied zwischen dem SDDF- und dem binĂ€ren TFT-Format besteht darin, dass der Exponent in der SDDF gleich dem Basisgrad b = 10 ist, wĂ€hrend der Exponent des binĂ€ren TFT-Formats gleich dem binĂ€ren Basisgrad b = 2 ist. Dementsprechend wird fĂŒr SDDF die Nummer als dargestellt
und fĂŒr die CNC im IEEE754-Standard als
.
Der Unterschied zwischen der SDDF und dem binĂ€ren Dezimalformat (DDF oder BCD) der CTT besteht darin, dass in der DDF die Mantisse und der Exponent ganzzahlige Dezimalzahlen sind, in die jede Ziffer als Byte oder Tetrade geschrieben wird, wĂ€hrend in der SDDF alle Dezimalzahlen ausgedrĂŒckt werden ihre ganzzahligen binĂ€ren Ăquivalente.
Somit kann jede dezimale reelle Zahl in SDDF mit einem BinÀrcode bis zu N signifikanten Dezimalstellen dargestellt werden.
Alle arithmetischen Operationen an dezimalen CTDs in SDDF werden gemÀà den Regeln der gewöhnlichen Arithmetik ausgefĂŒhrt, wobei alle Argumente ganze Zahlen sind.
Vor jeder arithmetischen Operation wird die Dezimalzahl im SDDF-Format dargestellt: [S, M, z, e]. Wo ist der S-Code des Vorzeichens der Nummer (0 oder 1). M ist das binĂ€re ganzzahlige Ăquivalent der Mantisse einer Zahl mit der Anzahl der Dezimalstellen N. Wobei N die Genauigkeit der Berechnungen ist. z ist das Vorzeichen des Exponenten, e ist der Wert des Exponenten. Eine solche Darstellung ist eine normalisierte Dezimaldarstellung.
Beispielsweise sollte fĂŒr Berechnungen mit einer Genauigkeit von N = 7 signifikanten Stellen die Zahl 123.456 als 1234560 * 10 ^ -4 dargestellt werden.
Die minimale Dezimalmantisse fĂŒr N = 7 ist M = 1.000.000.
Die maximale Dezimalmantisse fĂŒr N = 7 ist M = 9999999.
Das binĂ€re Ăquivalent der maximalen 7-Bit-Nummer 9999999 ist 100 110 001 001 011 001 111 111. Es enthĂ€lt 24 BinĂ€rziffern. Daher ist ein binĂ€res 24-Bit-Register erforderlich, um Dezimal-Mantissen im Bereich von 1.000.000 bis 9999999 darzustellen.
Wenn in einem binÀren 32-Bit-Maschinenwort, in dem der Mantisse 24 Ziffern zugewiesen sind, dem Vorzeichen der Zahl S eine Ziffer, dem Exponenten z eine Ziffer und dem Exponenten 6 Ziffern zugeordnet sind, können in einer solchen SDF dezimale reelle Zahlen dargestellt werden genau auf N = 7 signifikante Dezimalzahlen. Die absoluten Werte dieser Zahlen reichen von 1.000.000 * 10 ^ -64 bis 9999999 * 10 ^ 64.
Nach jeder arithmetischen Operation sollte die Dezimalmantisse der Zahl normalisiert und auf die nĂ€chste ganze Zahl gerundet werden. Dazu muss das resultierende binĂ€re Ăquivalent der Mantisse der Zahl erforderlichenfalls mit dem binĂ€ren Ăquivalent von 10 so multipliziert oder dividiert werden, dass die Anzahl der Stellen des DezimalĂ€quivalents der Mantisse gleich N wird. Die resultierende Zahl sollte auf die nĂ€chste ganze Zahl gerundet werden.
Ein Beispiel.Finden Sie bis zu N = 7 das Ergebnis des Ausdrucks (9675,423 * 10 ^ 2-9,675421 * 10 ^ 5) * 10 ^ 6 - 199992
Dieser Ausdruck wird manuell oder auf einem Windows-Rechner berechnet und entspricht der Zahl 8.000000
Wir schreiben die Operanden in normalisierter Form:
A=9,675423*10^5= 9675423*10^-1
B= 9675,421*10^2 = 9675421*10^-1
C=1000000 = 1000000*10^0
D = 1999920*10^-1
In SDDF werden diese Operanden wie folgt dargestellt:
A=[0, 9675423,1, 1]
B=[0,9675421,1, 1]
C=[0, 1000000,0, 0]
D=[0, 1999920,1, 1]
Finden Sie den Unterschied S = AB. Da die Exponenten der Operanden A und B gleich sind, finden wir die Mantisse ihres Unterschieds:
9675423-9675421=2
Um die Mantisse S zu normalisieren, mĂŒssen wir sie mit 10 ^ 6 multiplizieren, wĂ€hrend der Exponent um 6 reduziert werden muss. Dann ist S = 2 * 1.000.000 = 2.000.000 * 10 ^ -7
Wir berechnen das Produkt P = D * C. Multiplizieren Sie dazu die Mantisse der Faktoren und addieren Sie die Exponentiale:
M = 2.000.000 * 10 ^ -7 * 1.000.000 * 10 * 0 = 2.000.000.000.000 * 10 ^ -7
Nach Normalisierung der Mantisse erhalten wir P = 2.000.000 * 10 ^ -1.
Das Ergebnis der Berechnung R ist gleich:
R = PD = 2.000.000 * 10 ^ -1-1999920 * 10 ^ -1 = 80 * 10 ^ -1
Nach der Normalisierung erhalten wir R = 8000000 * 10 ^ -6.
Zum Vergleich ergibt die Berechnung dieses Ausdrucks in Excel das Ergebnis R = 8.0000698E + 00.
Der Autor hat im SDDF einen Taschenrechneralgorithmus entwickelt, der die Addition, Subtraktion, Multiplikation und Division von Dezimalzahlen mit bis zu 18 signifikanten Stellen durchfĂŒhrt. Um die Richtigkeit des Algorithmus zu bestĂ€tigen, wurde ein C ++ - Programm geschrieben. Da der Autor kein professioneller Programmierer ist, ist das entwickelte Programm nur fĂŒr das Studium des Berechnungsalgorithmus vorgesehen.
Unten sehen Sie als Beispiel einen Screenshot, der die Berechnung des folgenden Ausdrucks zeigt:
1,23456789098765432*10^8 * 9,87654321234567891*10^(-9) - 1,2193263123914037*10^0â 3.0*10^(-17)

Um die Leistung zu testen, wurde der Vorgang des Multiplizierens von zwei 18-Bit-Zahlen in einem Zyklus gestartet. Das Programm lief auf einem IntelÂź Core (TM) i3-4330 CPU@3.50GHz 3.50 GHz Computer. RAM 8,0 GB. Systemtyp: 64-Bit Die Geschwindigkeit betrug â 2,4 · 10 & supmin; & sup6; Multiplikationen pro Sekunde.
Ich kann mich bisher nicht mit der Geschwindigkeit der Windows- und Excel-Rechner vergleichen, es gibt nicht genĂŒgend Informationen :(. Die Genauigkeit der Berechnungen ist dieselbe, als ob die Berechnungen manuell durchgefĂŒhrt wĂŒrden.
Referenzen:
- Seitenansicht: IEEE754-Standard
- Ist eine Float-Normalisierung notwendig?
- Schwerwiegende binÀre Rechenfehler beim Arbeiten mit Gleitkommazahlen
- Wieder ĂŒber Gleitkommazahlen
- Zahlensysteme
- Grundregeln fĂŒr ungefĂ€hre Berechnungen