![]() |
Gleitkommazahlen Exponentialschreibweise unerwünscht
Hi,
ich möchte einfach abs(0.00007957 - 0.00008172) = 2,149995735E-6 alle 3 Variablen sind als real definiert. Wird der Wertebereich überschritten oder warum zeigt er mir die zahl nur in Exponentialschreibweise an? Wie kann ich den längeren Wert mit den 0en ausgeben lassen? grüße |
Re: Gleitkommazahlen Exponentialschreibweise unerwünscht
Zitat:
das ist ein für Fliesskommazahlen typischer Rundungsfehler, exakt wäre als Ergebnis -0.00000215 (macht mein Texas-Taschenrechner übrigens richtig). Dadurch wird erst das Ausgabeformat überschritten, hat mich gleich gewundert, dass sowas bei einer Subtraktion vorkommt. Der Taschenrechner von XP arbeitet übrigens auch exakt. Ich finde den Fehler unzulässig, aber machen kannst du nicht viel, wenn dein Programm so rechnet. Du könntest es höchstens mit höherer Genauigkeit probieren, obwohl das eigentlich keinen Sinn macht, denn schliesslich subtrahierst du 2 4stellige Zahlen, das darf nicht schiefgehen. Vielleicht findet sich hier im Forum ja noch ein Spezialist für Borland-Arithmetik, die hat schon so ihre Eigenheiten. Gruss Reinhard |
Re: Gleitkommazahlen Exponentialschreibweise unerwünscht
Die Genauigkeitz hat nichts mit der Schreibweise zu tun - mein Taschenrechner zeigt auch -2,15*10^-6 an ;)
Wie man das jetzt hinbekommt, dass statt der Exponentialschreibweise Nullen angezeigt werden, weis ich jetzt auch nicht - evtl. kann Format das, aber keine Garantie ;) |
Re: Gleitkommazahlen Exponentialschreibweise unerwünscht
Hallo,
nimm Extended, dann funktionierts (Genauigkeit) für die Ausgabe wirst Du Dir wohl eine Funktion schreiben müssen: -Umwandeln in String -entspr. dem Exponenten gleiche Anzahl Nullen voranstellen -und das Komma verschieben -10er Potenz "abschneiden" 'was Anderes fällt mir auf die Schnelle nicht ein :( |
Re: Gleitkommazahlen Exponentialschreibweise unerwünscht
Habe die 3 Variablen mal als extended definiert.
--> 2,15E-6 Sieht schon besser aus, und die genaugkeit reicht mir auch (ob da nun noch 99999..bla blub kommt.. ^^) Müsst mir quasi ne Funktion schreiben die, 0en einfügt, das Komma an der richtigen Stelle setzt, und hinten E-6 abschneided. geht ja alles mit Stringoperationen. Kein Problem. Aber iwie ziemlich umständlich. Dachte es gibt vll ne fertige Funktion/Prozedur die mir die nicht exponentielle Darstellung ausgibt. Hatte auch an Format gedacht, aber bis jetzt nix vernünftiges zusammenbekommen. Geht aber bestimmt. |
Re: Gleitkommazahlen Exponentialschreibweise unerwünscht
Guck dir mal FormatFloat in der Delphi Hilfe an.
|
Re: Gleitkommazahlen Exponentialschreibweise unerwünscht
ja hab ich auch schon gesehen -,--
Sollte ich mir vll doch nochmal genau anschaun. Wobei ich Lazarus nutze und auf diesen ![]() |
Re: Gleitkommazahlen Exponentialschreibweise unerwünscht
Zitat:
... floating Point Zahlen stellen eine Dezimalzahl als Summe der Reihe (b_i*1/(2^i)) dar, wobei b_i das i.te Bit der Mantisse darstellt. Es ist logisch, das nicht alle Dezimalzahlen so exakt darzustellen sind. Das Ein (TI)-Taschenrechner das richtig ausrechnet, liegt vermutlich daran, das er mit BCD-Arithmetik arbeitet. Das ist langsamer, aber eben genau (bis auf Rundungsfehler der letzten Stelle). |
Re: Gleitkommazahlen Exponentialschreibweise unerwünscht
Habe nun endlich was fertiges gefunden. Mit der Funktion FloatToStrF lässt sich einiges in der Ausgabe tun.
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 01:25 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz