Mio. Nachkommastellen in andere Basis umrechnen
Verfasst: 03.02.2015 23:46
Es gibt ja hier die UnlimitedIntegerArithmetic.dll.pbi, wo man sehr große GANZ-Zahlen berechnen kann.
Solange bei den Nachkommastellen keine Nullen auftauchen ist ja alles einfach. ABER sobald mehrere 0 hintereinander, muss man sich ein virtuelles Komma berechnen. Das wäre mit Stringlen umständlich, da pro Ziffer
nötig wäre, um die virtuelle Kommastelle zu speichern/berechnen (Beispiel Dez nach Basis 16):
16 · 0,06250000000000025 = 1,000000000000004 --> Ziffer: 1
16 · 3,9968028886505635e-15 = 6,394884621840902e-14 --> Ziffer: 0
16 · 6,394884621840902e-14 = 1,0231815394945442e-12 --> Ziffer: 0
16 · 1,0231815394945442e-12 = 1,6370904631912708e-11 --> Ziffer: 0
16 · 1,6370904631912708e-11 = 2,6193447411060333e-10 --> Ziffer: 0
16 · 2,6193447411060333e-10 = 4,190951585769653e-9 --> Ziffer: 0
16 · 4,190951585769653e-9 = 6,705522537231445e-8 --> Ziffer: 0
16 · 6,705522537231445e-8 = 0,0000010728836059570312 --> Ziffer: 0
16 · 0,0000010728836059570312 = 0,0000171661376953125 --> Ziffer: 0
16 · 0,0000171661376953125 = 0,000274658203125 --> Ziffer: 0
16 · 0,000274658203125 = 0,00439453125 --> Ziffer: 0
16 · 0,00439453125 = 0,0703125 --> Ziffer: 0
16 · 0,0703125 = 1,125 --> Ziffer: 1
16 · 0,125 = 2 --> Ziffer: 2
Gibt es nicht einfachere Möglichkeiten z.B. mit log10(x) oder String-Multiplikation, da wäre auch das "vorn abschneiden" einfacher als die Subtraktion mit Mio-stelligen Zahlen.
Oder fertigen Code... kann auch andere Sprache sein.
ABER kein Spezial-Code für Basis 16, da ich auch höhere Basen benötoge!
Ich nutze bereits bc (GNU), aber der PC braucht bei mehr als 1 Mio. Stellen über 5 Stunden!
Solange bei den Nachkommastellen keine Nullen auftauchen ist ja alles einfach. ABER sobald mehrere 0 hintereinander, muss man sich ein virtuelles Komma berechnen. Das wäre mit Stringlen umständlich, da pro Ziffer
Code: Alles auswählen
Laenge.s = Z_String(Ergebnis)
16 · 0,06250000000000025 = 1,000000000000004 --> Ziffer: 1
16 · 3,9968028886505635e-15 = 6,394884621840902e-14 --> Ziffer: 0
16 · 6,394884621840902e-14 = 1,0231815394945442e-12 --> Ziffer: 0
16 · 1,0231815394945442e-12 = 1,6370904631912708e-11 --> Ziffer: 0
16 · 1,6370904631912708e-11 = 2,6193447411060333e-10 --> Ziffer: 0
16 · 2,6193447411060333e-10 = 4,190951585769653e-9 --> Ziffer: 0
16 · 4,190951585769653e-9 = 6,705522537231445e-8 --> Ziffer: 0
16 · 6,705522537231445e-8 = 0,0000010728836059570312 --> Ziffer: 0
16 · 0,0000010728836059570312 = 0,0000171661376953125 --> Ziffer: 0
16 · 0,0000171661376953125 = 0,000274658203125 --> Ziffer: 0
16 · 0,000274658203125 = 0,00439453125 --> Ziffer: 0
16 · 0,00439453125 = 0,0703125 --> Ziffer: 0
16 · 0,0703125 = 1,125 --> Ziffer: 1
16 · 0,125 = 2 --> Ziffer: 2
Gibt es nicht einfachere Möglichkeiten z.B. mit log10(x) oder String-Multiplikation, da wäre auch das "vorn abschneiden" einfacher als die Subtraktion mit Mio-stelligen Zahlen.
Oder fertigen Code... kann auch andere Sprache sein.
ABER kein Spezial-Code für Basis 16, da ich auch höhere Basen benötoge!
Ich nutze bereits bc (GNU), aber der PC braucht bei mehr als 1 Mio. Stellen über 5 Stunden!