Frage zum Rechnen mit kleinen Zahlen
Frage zum Rechnen mit kleinen Zahlen
Hallo,
wie kann man mit kleinen Zahlen rechnen und sich dann die Ergebnisse anzeigen lassen? Gibt es hier einen Trick?
Beispiel: 1.23456E-23 * 3.456789E-10 =
wie kann man mit kleinen Zahlen rechnen und sich dann die Ergebnisse anzeigen lassen? Gibt es hier einen Trick?
Beispiel: 1.23456E-23 * 3.456789E-10 =
- Imhotheb
- Beiträge: 192
- Registriert: 10.10.2014 13:14
- Computerausstattung: Intel 8086, 640 KB RAM, Hercules Video Adapter, 2 x 5 1/4" 360kb Floppy, MS-DOS 3
- Wohnort: Wolfenbüttel
Re: Frage zum Rechnen mit kleinen Zahlen
Verstehe nicht so ganz was du wissen möchtest ... aber es kommt darauf an, wie genau dein Ergebnis sein soll ... entweder Float (.f), einfache Genauigkeit, oder Double (.d), doppelte Genauigkeit, für die Variablen benutzen.
Zum umwandeln in einen String kannst du StrF(Var.f) oder StrD(Var.d) verwenden
Mehr ist in der Hilfe unter "Variablen, Typen und Operatoren" zu finden
Zum umwandeln in einen String kannst du StrF(Var.f) oder StrD(Var.d) verwenden
Mehr ist in der Hilfe unter "Variablen, Typen und Operatoren" zu finden
weil einfach einfach einfach ist ... mach' ich es anders
Re: Frage zum Rechnen mit kleinen Zahlen
Ich habe mir jetzt ein kleines Programm geschrieben um mein Problem einzugrenzen. Ich muss da wohl einen Fehler in meiner längeren Formel haben (die ich hier nicht gepostet habe)
Hier das kleine Test-Programm (mit einem richtigen Ergebnis
)
a.d=1.1234*Pow(10,-120)
Debug a
a=a/Pow(10,100)
Debug a
b.d=Log10(a)
Debug b
Das Ergebnis wird mit Debug b auch richtig anzeigt. Also hat sich meine Frage eigentlich erübrigt...
Wie kann ich mir aber die Zwischenergebnisse mit "Debug a" richtig anzeigen lassen?
Geht das nur mit "Debug StrD(a,250)"? Gibt es unter Purebasic auch eine wissenschaftliche Notation?
Hier das kleine Test-Programm (mit einem richtigen Ergebnis

a.d=1.1234*Pow(10,-120)
Debug a
a=a/Pow(10,100)
Debug a
b.d=Log10(a)
Debug b
Das Ergebnis wird mit Debug b auch richtig anzeigt. Also hat sich meine Frage eigentlich erübrigt...
Wie kann ich mir aber die Zwischenergebnisse mit "Debug a" richtig anzeigen lassen?
Geht das nur mit "Debug StrD(a,250)"? Gibt es unter Purebasic auch eine wissenschaftliche Notation?
Re: Frage zum Rechnen mit kleinen Zahlen
Code: Alles auswählen
UseSQLiteDatabase()
OpenDatabase(0, ":memory:", "", "", #PB_Database_SQLite)
DatabaseQuery(0, "Select 1.23456E-23 * 3.456789E-10")
NextDatabaseRow(0)
Debug GetDatabaseString(0, 0)

a²+b²=mc²
- NicTheQuick
- Ein Admin
- Beiträge: 8807
- Registriert: 29.08.2004 20:20
- Computerausstattung: Ryzen 7 5800X, 64 GB DDR4-3200
Ubuntu 24.04.2 LTS
GeForce RTX 3080 Ti - Wohnort: Saarbrücken
Re: Frage zum Rechnen mit kleinen Zahlen
Was hältst du davon?
Ich hab es noch nicht eingehend getestet.
Edit: Für negative Zahlen angepasst.
Code: Alles auswählen
Procedure.s StrDEx(double.d, decimals.i = 5)
Protected exp10.d = Log10(Abs(double))
exp10 = Round(exp10, #PB_Round_Down)
double * Pow(10, -exp10)
ProcedureReturn StrD(double, decimals) + "e" + Str(exp10)
EndProcedure
a.d = 1.1234 * Pow(10,- 120)
Debug StrDEx(a)
a = a / Pow(10, 100)
Debug StrDEx(a)
b.d = Log10(a)
Debug b
Edit: Für negative Zahlen angepasst.
Re: Frage zum Rechnen mit kleinen Zahlen
Hallo Kiffi und NicTheQuick
das sind tolle Lösungen. Vielen Dank.
@Kiffi
Mit SQLiteDatabase habe ich noch nie gearbeitet. Könntest du vielleicht die einzelnen Zeilen etwas genauer erklären?
Welche Möglichkeiten/Vorteile bietet eine SQLiteDatabase-Lösung? Wo liegen die Grenzen/Nachteile?
@NicTheQuick
Für positive Zahlen ist diese Erweiterung super und sofort zu verstehen.
Für negative Zahlen muss die Schleife noch erweitert werden.
das sind tolle Lösungen. Vielen Dank.
@Kiffi
Mit SQLiteDatabase habe ich noch nie gearbeitet. Könntest du vielleicht die einzelnen Zeilen etwas genauer erklären?
Welche Möglichkeiten/Vorteile bietet eine SQLiteDatabase-Lösung? Wo liegen die Grenzen/Nachteile?
@NicTheQuick
Für positive Zahlen ist diese Erweiterung super und sofort zu verstehen.
Für negative Zahlen muss die Schleife noch erweitert werden.
- NicTheQuick
- Ein Admin
- Beiträge: 8807
- Registriert: 29.08.2004 20:20
- Computerausstattung: Ryzen 7 5800X, 64 GB DDR4-3200
Ubuntu 24.04.2 LTS
GeForce RTX 3080 Ti - Wohnort: Saarbrücken
Re: Frage zum Rechnen mit kleinen Zahlen
Stimmt, ich hab es oben korrigiert.moin hat geschrieben:Für negative Zahlen muss die Schleife noch erweitert werden.
Re: Frage zum Rechnen mit kleinen Zahlen
ist eigentlich relativ simpel:moin hat geschrieben:Mit SQLiteDatabase habe ich noch nie gearbeitet. Könntest du vielleicht die einzelnen Zeilen etwas genauer erklären?
Code: Alles auswählen
UseSQLiteDatabase() ; SQLite initialisieren
OpenDatabase(0, ":memory:", "", "", #PB_Database_SQLite) ; eine temporäre Datenbank im Speicher erstellen
DatabaseQuery(0, "Select 1.23456E-23 * 3.456789E-10") ; Term berechnen
NextDatabaseRow(0) ; den Datensatz-Zeiger auf das Ergebnis der Berechnung setzen
Debug GetDatabaseString(0, 0) ; und das Ergebnis der Berechnung ausgeben
SQLite hat einen eingebauten rudimentären mathematischen Parser, den man auf diese Weise nutzen kann.moin hat geschrieben:Welche Möglichkeiten/Vorteile bietet eine SQLiteDatabase-Lösung? Wo liegen die Grenzen/Nachteile?
Vorteil: nur 5 Zeilen Code

Nachteile:
* vermutlich wird die Performance im Vergleich zu den PureBasic Math-Befehlen eher schlecht sein.
* Wenn Du SQLite verwendest, wird Deine EXE automatisch um knapp 500 KB größer.
Ich nehme auch mal stark an, dass die Fähigkeiten des Parsers ziemlich begrenzt sind. Da bist Du mit den PB-Befehlen mit Sicherheit flexibler.
Grüße ... Peter
a²+b²=mc²