Rundung und Substraktion

Fragen und Antworten, Beispiele

Moderator: herw

Antworten
ettette
user
Beiträge: 28
Registriert: 5. November 2009, 21:50

Rundung und Substraktion

Beitrag von ettette »

tst.jpg
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
Du hast keine ausreichende Berechtigung, um die Dateianhänge dieses Beitrags anzusehen.
Benutzeravatar
herw
moderator
Beiträge: 3123
Registriert: 13. März 2006, 18:28
Wohnort: Dortmund

Re: Rundung und Substraktion

Beitrag von herw »

ettette hat geschrieben:
tst.jpg
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
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.

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
ettette
user
Beiträge: 28
Registriert: 5. November 2009, 21:50

Re: Rundung und Substraktion

Beitrag von ettette »

Danke für die Antwort-habe ich auch verstanden.
Kann man die Formatwandlung nicht irgendwie mit Truncate machen?
Liebe Grüße
Ette
Benutzeravatar
herw
moderator
Beiträge: 3123
Registriert: 13. März 2006, 18:28
Wohnort: Dortmund

Re: Rundung und Substraktion

Beitrag von herw »

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
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?
128bpm
synthesist
Beiträge: 58
Registriert: 26. Februar 2018, 12:23

Re: Rundung und Substraktion

Beitrag von 128bpm »

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.
Dazu habe ich noch folgendes gefunden:

https://www.elektronik-kompendium.de/si ... 807231.htm
Antworten