Delphi-PRAXiS
Seite 2 von 4     12 34      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Genauigkeit von String to Single Konvertierung (https://www.delphipraxis.net/203853-genauigkeit-von-string-single-konvertierung.html)

freimatz 2. Apr 2020 17:27

AW: Genauigkeit von String to Single Konvertierung
 
Da hat sie sicher recht. Allerdings ungenau UND langsam geht auch recht einfach. :duck:

Rollo62 3. Apr 2020 06:42

AW: Genauigkeit von String to Single Konvertierung
 
Zitat:

Zitat von p80286 (Beitrag 1461043)
Es gibt ja auch andere Möglichkeiten:https://de.wikipedia.org/wiki/BCD-Code
Lesen und sich eine eigene Meinung bilden.

Gruß
K-H

P.S.
Meine Ausbilderin (ende der 70er) sagte immer Rechner sind schnell oder genau. Beides auf einmal geht nicht.

Wenn man den Wertebereich genau kennt, und auch die gewünschte Auflösung fix ist kann man ja auch mit integer arbeiten.
Z.B. Bereich ist innerhalt +/-100000 mit einer Auflösung von 0.001, dann kann man einfach intern mit IntVariable * 1000 rechnen, und nur bei Anzeigen wieder um 1000 korrigieren.
Die internen Berechnungen sind dann sehr schnell, mit Integer, nur bei den Ein- Ausgaben muss man konvertieren.
Das ist dann sehr exakt, nur bei Berecnungen muss man aufpassen das man nicht das Integer-Limit überschreitet.
Man könnte sich einen eigenen Typ dafür bauen und/oder mit record helpern eine Überlaufprüfung o.ä. einbauen.

himitsu 3. Apr 2020 08:28

AW: Genauigkeit von String to Single Konvertierung
 
Zitat:

Zitat von Rollo62 (Beitrag 1461125)
mit einer Auflösung von 0.001, dann kann man einfach intern mit IntVariable * 1000 rechnen, und nur bei Anzeigen wieder um 1000 korrigieren.
Die internen Berechnungen sind dann sehr schnell, mit Integer, nur bei den Ein- Ausgaben muss man konvertieren.
Das ist dann sehr exakt, nur bei Berecnungen muss man aufpassen das man nicht das Integer-Limit überschreitet.
Man könnte sich einen eigenen Typ dafür bauen und/oder mit record helpern eine Überlaufprüfung o.ä. einbauen.

Delphi-Referenz durchsuchenCurrency :stupid:

Rollo62 3. Apr 2020 10:06

AW: Genauigkeit von String to Single Konvertierung
 
Ja kann man nehmen, aber wenn z.B. Auflösung 0.0000001 gebraucht wird muss man sich was selber basteln, oder nicht ?
Currency wäre natürlich eine gute Basis.

Zitat:

Currency is a fixed-point data type. The maximum error when converting from floating-point to Currency is 0.00005.
Ich meine Curreny nutzt */ 10000 fix, oder kann man das irgendwo einstellen ?

Uwe Raabe 3. Apr 2020 11:09

AW: Genauigkeit von String to Single Konvertierung
 
Nein, Currency kennt nur 4 Nachkommastellen.

Andreas13 3. Apr 2020 12:05

AW: Genauigkeit von String to Single Konvertierung
 
Es stellt sich die Frage, was für einen wichtiger ist: "Schnell" ein "bißchen falsches" Ergebnis zu bekommen, oder etwas langsamer ein Korrektes. Ich persönlich ziehe für meine numerischen Berechnungsroutinen immer den korrekten Weg vor und benutze durchweg die Multipräzisions-Arithmetik-Bibliotheken von Wolfgang Ehrhardt. Diese arbeiten intern mit zusammengesetzten, "sehr langen" Integer-Zahlen, wodurch die hohe Genauigkeit gewährleistet wird. Diese kostet allerdings oft viel Rechenzeit. Aber die heutigen Prozessoren merken das gar nicht…
Gruß, Andreas

himitsu 3. Apr 2020 15:18

AW: Genauigkeit von String to Single Konvertierung
 
Ähnlich dem BCD, wo eine Ziffer in 4 Bit gespeichert ist, kann man auch gern mit Strings rechnen, also wo die Ziffern dann als Char jeweils 8 Byte belegen,
aber von der Mathematik dahinter gibt es praktisch keinen Unterschied.

https://www.delphipraxis.net/135492-...-math-lib.html
In Bezug auf die Speicherung von Dezimalzahlen gibt es da natürlich keine Probleme,
aber auch im 10er-System gibt es die selben Beschränkung, wie im 2er.

1 / 3 lässt sich nicht "genau" speichern, selbst wenn man hierfür eine Milliarde Dezimalstellen nach dem Komma verwendet. (2 GB)

0.333333333.................



Aber man könnte hier mit Exponenten arbeiten, wenn die Exponenten beliebig groß sind und man die Basis nicht auf Biegen und Brechen normieren muß, dann ließe sich praktisch alles Speichern.
Ebenfalls könnte man Bruchzahlen speichern, also direkt z.B. die 1 und die 3 von dem ⅓.

Harry Stahl 4. Apr 2020 22:11

AW: Genauigkeit von String to Single Konvertierung
 
Zitat:

Zitat von Andreas13 (Beitrag 1461168)
Es stellt sich die Frage, was für einen wichtiger ist: "Schnell" ein "bißchen falsches" Ergebnis zu bekommen, oder etwas langsamer ein Korrektes. Ich persönlich ziehe für meine numerischen Berechnungsroutinen immer den korrekten Weg vor und benutze durchweg die Multipräzisions-Arithmetik-Bibliotheken von Wolfgang Ehrhardt. Diese arbeiten intern mit zusammengesetzten, "sehr langen" Integer-Zahlen, wodurch die hohe Genauigkeit gewährleistet wird. Diese kostet allerdings oft viel Rechenzeit. Aber die heutigen Prozessoren merken das gar nicht…
Gruß, Andreas

Gibt es hier irgendwo eine fertige Funktionssammlung (frei oder käuflich) zu beziehen?
Brauch ich im Moment zwar nicht, aber falls mal doch, wär es gut zu wissen.... (Tante Google hat da nichts ausgespuckt)

jaenicke 4. Apr 2020 22:53

AW: Genauigkeit von String to Single Konvertierung
 
Zitat:

Zitat von Harry Stahl (Beitrag 1461286)
Gibt es hier irgendwo eine fertige Funktionssammlung (frei oder käuflich) zu beziehen?
Brauch ich im Moment zwar nicht, aber falls mal doch, wär es gut zu wissen.... (Tante Google hat da nichts ausgespuckt)

Das liegt daran, dass der Autor leider verstorben ist und seine Webseite nicht mehr online ist.
Es gibt aber einen Snapshot von der Seite:
https://github.com/moe123/www.wolfgang-ehrhardt.de
Und dort auch die entsprechende Bibliothek:
https://github.com/moe123/www.wolfga...2018-11-27.zip

jfheins 5. Apr 2020 10:08

AW: Genauigkeit von String to Single Konvertierung
 
Und es liegt auch daran, dass für geschätzt 99,999% aller Anwendungsfälle die normalen Gleitkommazahlen ausreichen (ggf. mit Rundung). Es macht einfach keinen Unterschied, ob die Linie genau 3 Pixel breit ist oder ob sie erst 3,00000015 pixel breit sein sollte und dann gerundet wird.

Was mir so als use case in den Sinn kommt ist typischerweise Finanzen, Kryptographie und Tschenrechner.

Soweit ich mich erinnere, haben die Leute sich bei WinXP ein bisschen über den Taschenrechner lustig gemacht, weil der eben auch solche Ungenauigkeiten hatte. Dann hat MS dem Taschenrechner in Win7 einen ordentliche, arbitrary precision Kern verpasst. Fast keiner hat's gemerkt oder gelobt ;-) (Aber inzwischen kann der TR auch sowas wie 1200000000000000000047 - 1200000000000000000000 rechnen)


Alle Zeitangaben in WEZ +1. Es ist jetzt 02:23 Uhr.
Seite 2 von 4     12 34      

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz