Rundung und Substraktion

Fragen und Antworten, Beispiele

Moderator: herw

Rundung und Substraktion

Beitragvon ettette » Di 24. Feb 2015, 18:38

tst.jpg
tst.jpg (34.31 KiB) 2239-mal betrachtet
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
ettette
user
 
Beiträge: 25
Registriert: Do 5. Nov 2009, 22:50

Re: Rundung und Substraktion

Beitragvon herw » Di 24. Feb 2015, 21:06

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
Benutzeravatar
herw
moderator
 
Beiträge: 3043
Registriert: Mo 13. Mär 2006, 19:28
Wohnort: Dortmund

Re: Rundung und Substraktion

Beitragvon ettette » Di 24. Feb 2015, 21:31

Danke für die Antwort-habe ich auch verstanden.
Kann man die Formatwandlung nicht irgendwie mit Truncate machen?
Liebe Grüße
Ette
ettette
user
 
Beiträge: 25
Registriert: Do 5. Nov 2009, 22:50

Re: Rundung und Substraktion

Beitragvon herw » Mi 25. Feb 2015, 06:36

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?
Benutzeravatar
herw
moderator
 
Beiträge: 3043
Registriert: Mo 13. Mär 2006, 19:28
Wohnort: Dortmund

Re: Rundung und Substraktion

Beitragvon 128bpm » So 8. Apr 2018, 20:14

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
128bpm
synthesist
 
Beiträge: 58
Registriert: Mo 26. Feb 2018, 13:23


Zurück zu MODULE UND MAKROS (core)

Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 1 Gast

cron