Rundung und Substraktion
Moderator: herw
-
- user
- Beiträge: 28
- Registriert: 5. November 2009, 21:50
Rundung und Substraktion
für eine Interpolation habe ich ein Core-Macro gebaut.
Ich möchte den Wert für eine Aufrundung, den für eine Abrundung und einen Wert wo der ursprüngliche Wert zwischen diesen beiden lag.
Für den Eingang von 950,1 also 950, 951 und 0,1.
Beim addieren vom Integer 951 (oberer Wert) den Float 950,1 abziehe, müsste ich doch 0,9 erhalten.
Ich erhalte aber den Wert 0,900391.
Wieso ist das so.
Wie erreiche ich, dass ich 0,9 erhalte?
Liebe Grüße
Ette
Du hast keine ausreichende Berechtigung, um die Dateianhänge dieses Beitrags anzusehen.
- herw
- moderator
- Beiträge: 3123
- Registriert: 13. März 2006, 18:28
- Wohnort: Dortmund
Re: Rundung und Substraktion
Das liegt daran, dass man die Genauigkeit von float-Zahlen nicht überschätzen darf: maximal 5 Stellen sind einigermaßen genau. Die relative Dichte der Fießkommazahlen ist zwischen -1 und +1 am größten, bei größeren Zahlen nimmt sie stark ab. Siehe hierzu http://de.wikipedia.org/wiki/Gleitkommazahl .ettette hat geschrieben:Hallo zusammen,
für eine Interpolation habe ich ein Core-Macro gebaut.
Ich möchte den Wert für eine Aufrundung, den für eine Abrundung und einen Wert wo der ursprüngliche Wert zwischen diesen beiden lag.
Für den Eingang von 950,1 also 950, 951 und 0,1.
Beim addieren vom Integer 951 (oberer Wert) den Float 950,1 abziehe, müsste ich doch 0,9 erhalten.
Ich erhalte aber den Wert 0,900391.
Wieso ist das so.
Wie erreiche ich, dass ich 0,9 erhalte?
Liebe Grüße
Ette
D.h. zum Beispiel für die Zahl 950,1 höchstens zwei Stellen mehr noch genau sind (wenn überhaupt).
Dies ist dem Dualsystem geschuldet, da man im Bereich der Dezimalbrüche diese ja immer nur durch eine Summe der Stammbrüche 1/2, 1/4, 1/8, 1/16 usw. darstellen kann.
In deinem Beispiel ist die angezeigte 950,1 eigentlich 950,000391. Allerdings ist die 0,900391 natürlich auch nicht exakt.
Taschenrechner sind da zum Beispiel wesentlich genauer.
Integerzahlen sind dagegen immer exakt.
Ein Trick wäre, aus 950,1 und 950 in die Ganz-Zahlen 9510 und 9500 umzuwandeln, dann exakt die Differenz berechnen und anschließend wieder durch 10 zu dividieren. Allerdings kann es dann wieder zu Ungenauigkeiten kommen; ich kann nicht abschätzen, wie genau du Werte benötigst, aber ich habe hoffentlich etwas Licht ins Ganze gebracht.
ciao herw
-
- user
- Beiträge: 28
- Registriert: 5. November 2009, 21:50
Re: Rundung und Substraktion
Danke für die Antwort-habe ich auch verstanden.
Kann man die Formatwandlung nicht irgendwie mit Truncate machen?
Liebe Grüße
Ette
Kann man die Formatwandlung nicht irgendwie mit Truncate machen?
Liebe Grüße
Ette
- herw
- moderator
- Beiträge: 3123
- Registriert: 13. März 2006, 18:28
- Wohnort: Dortmund
Re: Rundung und Substraktion
ja das meinte ich mit der Umwandlung. Aber wie gesagt, es hängt auch davon ab, wie viele Stellen Genauigkeit die benötigst. Vielleicht kannst du mit reinen integer-Zahlen arbeiten und nur die Anzeige soll dezimal sein?ettette hat geschrieben:Danke für die Antwort-habe ich auch verstanden.
Kann man die Formatwandlung nicht irgendwie mit Truncate machen?
Liebe Grüße
Ette
-
- synthesist
- Beiträge: 58
- Registriert: 26. Februar 2018, 12:23
Re: Rundung und Substraktion
Dazu habe ich noch folgendes gefunden:herw hat geschrieben:Das liegt daran, dass man die Genauigkeit von float-Zahlen nicht überschätzen darf: maximal 5 Stellen sind einigermaßen genau. Die relative Dichte der Fießkommazahlen ist zwischen -1 und +1 am größten, bei größeren Zahlen nimmt sie stark ab. Siehe hierzu http://de.wikipedia.org/wiki/Gleitkommazahl .
D.h. zum Beispiel für die Zahl 950,1 höchstens zwei Stellen mehr noch genau sind (wenn überhaupt).
Dies ist dem Dualsystem geschuldet, da man im Bereich der Dezimalbrüche diese ja immer nur durch eine Summe der Stammbrüche 1/2, 1/4, 1/8, 1/16 usw. darstellen kann.
In deinem Beispiel ist die angezeigte 950,1 eigentlich 950,000391. Allerdings ist die 0,900391 natürlich auch nicht exakt.
https://www.elektronik-kompendium.de/si ... 807231.htm