Seite 1 von 1

Rundung und Substraktion

Verfasst: 24. Februar 2015, 17:38
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

Re: Rundung und Substraktion

Verfasst: 24. Februar 2015, 20:06
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

Re: Rundung und Substraktion

Verfasst: 24. Februar 2015, 20:31
von ettette
Danke für die Antwort-habe ich auch verstanden.
Kann man die Formatwandlung nicht irgendwie mit Truncate machen?
Liebe Grüße
Ette

Re: Rundung und Substraktion

Verfasst: 25. Februar 2015, 05:36
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?

Re: Rundung und Substraktion

Verfasst: 8. April 2018, 19:14
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