Unicode, 32-Bit
So, habs ja Stargate versprochen, hier nun meine Include zum Thema unendlich große und genaue Decimalzahlen.
(Vergleich: http://www.purebasic.fr/german/viewtopi ... =8&t=19344)
Ein paar Anmerkungen dazu:
- Hab mich entschieden, keinen Speicher zu allocieren. Der Benutzer muss die Adresse als Parameter angeben, wo das Ergebnis gespeichert werden soll. Das sollte eine Variable mit dem Typ 'BigDecimal' sein (siehe auch Beispiel unten).
- Die Adresse des Ergebnisses kann die gleiche sein, wie einer der anderen Parameter.
- Der Parameter 'digits' kann in den meisten Fällen angegeben werden. Er limitiert die Berechungszeit und den gebrauchten Speicher. Das Ergebnis ist dann aber nicht mehr genau. Bei den Funktionen 'exp' und 'log' muss 'digits' angegeben werden.
- Falls 'digits' angegeben wird, wird gerunden. Wie gerundet wird, kann man selbst entscheiden (BDRoundMode).
So hier jetzt noch ein Beispiel:
Code: Alles auswählen
Define.BigDecimal bda, bdb, result
BDFromQuad(2947, bda)
BDFromString("0.000000000000000001", bdb)
BDAdd(bda, bdb, result)
Debug BDStr(result)
Debug BDStr(result, 10)
BDFromString("10", bda)
BDFromString("3", bdb)
BDDiv(bda, bdb, result, #Null, 200)
Debug BDStr(result)
BDFromString("1", bda)
BDExp(bda, result, 200)
Debug BDStr(result)
BDFromString("150", bda)
BDLog(bda, result, 200)
Debug BDStr(result)
BDFromDouble(-Infinity(), bda)
BDExp(bda, result, 20)
Debug BDStr(result)
BDFromString("12.74", bda)
BDFromString("12.75", bdb)
Debug BDStr(bda, 1)
Debug BDStr(bdb, 1)
BDRoundMode(#BDRoundHalfUp)
BDFromString("12.74", bda)
BDFromString("12.75", bdb)
Debug BDStr(bda, 1)
Debug BDStr(bdb, 1)
http://cshw89.mevedia.de/BigDecimal.pb
Freu mich auf Kritik, Anregungen ect., blablub....
mfg kevin