AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Trunc liefert falschen Wert

Ein Thema von DevidEspenschied · begonnen am 22. Dez 2014 · letzter Beitrag vom 23. Dez 2014
Antwort Antwort
Seite 2 von 2     12   
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.861 Beiträge
 
Delphi 11 Alexandria
 
#11

AW: Trunc liefert falschen Wert

  Alt 22. Dez 2014, 20:30
Extended ist das Selbe wie Double bei 64Bit. Kann man also schon nehmen.
Markus Kinzler
  Mit Zitat antworten Zitat
Benutzerbild von Uwe Raabe
Uwe Raabe

Registriert seit: 20. Jan 2006
Ort: Lübbecke
11.475 Beiträge
 
Delphi 12 Athens
 
#12

AW: Trunc liefert falschen Wert

  Alt 22. Dez 2014, 20:32
Extended ist das Selbe wie Double bei 64Bit. Kann man also schon nehmen.
In der Standardeinstellung gilt das auch für Real: Real48-Kompatibilität (Delphi)
Uwe Raabe
Certified Delphi Master Developer
Embarcadero MVP
Blog: The Art of Delphi Programming
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.184 Beiträge
 
Delphi 12 Athens
 
#13

AW: Trunc liefert falschen Wert

  Alt 22. Dez 2014, 21:13
Extended sollte man besser nicht verwenden ... es war eigentlich nur für's Rechnen vorgesehen und zum Speichern Single oder Double.

Real ist sowas wie Integer/NativeInt und String und ist nur ein Alias auf den "aktuellen" Typen.

Der uralte Real48-Typ sollte besser auch nicht mehr verwendet werden, außer für Abwärtskompatibilitäten, genauso wie Comp.
$2B or not $2B
  Mit Zitat antworten Zitat
Dejan Vu
(Gast)

n/a Beiträge
 
#14

AW: Trunc liefert falschen Wert

  Alt 22. Dez 2014, 22:41
Wieso sollte man Extended nicht nehmen? Und wofür 'nicht'?
  Mit Zitat antworten Zitat
Benutzerbild von Uwe Raabe
Uwe Raabe

Registriert seit: 20. Jan 2006
Ort: Lübbecke
11.475 Beiträge
 
Delphi 12 Athens
 
#15

AW: Trunc liefert falschen Wert

  Alt 22. Dez 2014, 23:03
Wieso sollte man Extended nicht nehmen? Und wofür 'nicht'?
Da Extended unter Win64 einem Double gleichkommt, bekommst du ab und an unterschiedliche Ergebnisse zu einem Win32 Compilat. Solange man nur für Win32 compiliert oder die Berechnungen unempfindlich gegebüber diesen Änderungen gestaltet, kann man Extended natürlich verwenden.
Uwe Raabe
Certified Delphi Master Developer
Embarcadero MVP
Blog: The Art of Delphi Programming
  Mit Zitat antworten Zitat
Medium

Registriert seit: 23. Jan 2008
3.686 Beiträge
 
Delphi 2007 Enterprise
 
#16

AW: Trunc liefert falschen Wert

  Alt 23. Dez 2014, 08:35
Es ist aber an sich auch völlig Hupe welchen Float man jetzt nimmt, da prinzipiell alle irgendwann solche Ergebnisse produzieren. Vielleicht nicht bei 9,7*10, aber dann eventuell bei 3,1*20 oder wann auch immer. Trunc() ist, wenn man eigentlich runden will, einfach die falsche Funktion. Und dann ist es auch schon wieder fast egal welchen Float-Typen man wählt (zumindest für diesen Schritt).

Wenn es dennoch keine Rundung sein soll, sondern ein Floor(), und es kommt wirklich darauf an, dass es immer wirklich genau richtig wird, dann wird Bei Google suchenFixpunktarithmetik eigentlich schon fast zur Pflicht.
"When one person suffers from a delusion, it is called insanity. When a million people suffer from a delusion, it is called religion." (Richard Dawkins)
  Mit Zitat antworten Zitat
Dejan Vu
(Gast)

n/a Beiträge
 
#17

AW: Trunc liefert falschen Wert

  Alt 23. Dez 2014, 09:02
Da Extended unter Win64 einem Double gleichkommt, bekommst du ab und an unterschiedliche Ergebnisse zu einem Win32 Compilat. Solange man nur für Win32 compiliert oder die Berechnungen unempfindlich gegebüber diesen Änderungen gestaltet, kann man Extended natürlich verwenden.
Die Unterschiede sind in den letzten Stellen zu finden, also der 14-16 Stelle. Und selbst in Iterationen blubbert der Fehler in die maximal 12 Stelle. Ich kann mir kein ernsthaftes Programm vorstellen, dass sich auf die letzten Stellen einer Berechnung verlässt, i.a. werden max. 6-8 Stellen verwendet.

Klar, auf dem Papier kommt ab und an etwas unterschiedliches heraus, aber das als Grund zu nehmen, auf Extended lieber zu verzichten, geht dann doch etwas zu weit. Das klingt nach Schlangenöl.
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.184 Beiträge
 
Delphi 12 Athens
 
#18

AW: Trunc liefert falschen Wert

  Alt 23. Dez 2014, 09:11
Wenn ich das richtig verstanden hab, dann war Extended nie für den öffentlichen Gebrauch gedacht,
drum trifft man das in anderen Programmiersprachen auch so selten an.

http://docwiki.embarcadero.com/Libra...ystem.Extended

Diese Rundungsfehler muß man bei allen Größen beachten und immer nur das größte zu verwenden ist auch keine Lösung.
$2B or not $2B
  Mit Zitat antworten Zitat
Dejan Vu
(Gast)

n/a Beiträge
 
#19

AW: Trunc liefert falschen Wert

  Alt 23. Dez 2014, 10:02
Diese Rundungsfehler muß man bei allen Größen beachten und immer nur das größte zu verwenden ist auch keine Lösung.
Nein, aber es gibt Berechnungen, bei denen die Double Genauigkeit nicht ausreicht, ich aber noch nicht auf eine BCD-Lösung ausweichen muss, die dann einen erheblichen Geschwindkeitsnachteil mit sich bringt.

Ich müsste in meinen Unterlagen stöbern, aber es gab einige Fälle, bei denen ich ganz froh war, Extended verwenden zu können.

Weiterhin mag es sein, das Extended mal nur intern gedacht war, aber ... WTF. Teflon wurde ursprünglich auch nur für die Raumfahrt entwickelt und heute brätst Du deine Spiegeleier drauf ( was soll uns dieses Gleichnis kurz vor Weihnachten sagen?)
  Mit Zitat antworten Zitat
Benutzerbild von Uwe Raabe
Uwe Raabe

Registriert seit: 20. Jan 2006
Ort: Lübbecke
11.475 Beiträge
 
Delphi 12 Athens
 
#20

AW: Trunc liefert falschen Wert

  Alt 23. Dez 2014, 10:55
Nein, aber es gibt Berechnungen, bei denen die Double Genauigkeit nicht ausreicht, ich aber noch nicht auf eine BCD-Lösung ausweichen muss, die dann einen erheblichen Geschwindkeitsnachteil mit sich bringt.

Ich müsste in meinen Unterlagen stöbern, aber es gab einige Fälle, bei denen ich ganz froh war, Extended verwenden zu können.
Natürlich darfst du Extended verwenden, um die erhöhte Genauigkeit auszunutzen. Es ist manchmal ganz praktisch, wenn man Double-Werte speichert, intern aber mit Extended rechnen kann. Ich verwende das selbst auch für meine CAD/CAM-Anwendungen.

Mit der Genauigkeit ist das allerdings so eine Sache. Gerade bei trigonometrischen Berechnungen muss man seine Genauigkeitsfenster beim Wechsel von Double zu Extended etwas weiter machen. Das hatte z.B. den Effekt, daß meine Unit-Tests für diese Berechnungen beim Umstieg von 32 auf 64 Bit zunächst nicht mehr durchliefen. Ist nichts Unlösbares, aber man muss halt darauf eingehen.
Uwe Raabe
Certified Delphi Master Developer
Embarcadero MVP
Blog: The Art of Delphi Programming
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 2 von 2     12   


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 00:13 Uhr.
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