AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Sonstige Fragen zu Delphi Delphi runden bis auf 2 stellen hinterm komma, 0 nicht wegschneiden
Thema durchsuchen
Ansicht
Themen-Optionen

runden bis auf 2 stellen hinterm komma, 0 nicht wegschneiden

Ein Thema von agm65 · begonnen am 27. Sep 2007 · letzter Beitrag vom 23. Aug 2010
 
marabu

Registriert seit: 6. Apr 2005
10.109 Beiträge
 
#11

Re: runden bis auf 2 stellen hinterm komma, 0 nicht wegschne

  Alt 27. Sep 2007, 18:14
Hallo,

Zitat von 3_of_8:
... da musst du dich schon bei Intel beschweren, die ihren x86er so gebaut haben. ...
die FPU ist historisch gesehen ein x87, aber ich weiß was du meinst.

Zitat von Sidorion:
Dass die Borländer ein seltsames Verhältnis zur Mathematik haben, sieht man schon bei Mod.
Hier kommt bei negativen Dividend ein negativer Rest raus und der auch noch Betragsmäßig falsch.
Die MOD Operation bedarf stets der Definition - und es gibt mehr als eine Definition. Borland hat eine Definition gewählt und veröffentlicht: x mod y = x - (x div y) * y. Was ist daran seltsam?

Zitat von Sourcemaker:
... das behauptet die Delphi-Hilfe.
Die Behauptung habe ich gelesen. Abgeshen davon, dass deine Code-Zeile das Ergebnis 0.0000 liefert und somit nicht zur Erhellung der Problematik beiträgt, müsste nach deiner Argumentation 0.435 auf zwei Nachkommastellen gerundet 0.44 ergeben - das Eregbnis von RoundTo(0.435, -2) ist aber 0.43:

Delphi-Quellcode:
var
  d: Double;
begin
  d := 0.435; // 0,434999999999999998
  ShowMessage(Format('%.18f', [d]));
end;
Bei der Geschichte mit dem Banker's Rounding wird immer so getan, als ob das Verfahren auf Zahlen im Dezimalsystem ausgeführt würde, die FPU arbeitet aber mit dem dualen System. Und der IEEE Standard 754 spricht auch nicht vom Banker's Rounding:

Aus der HP 9000 Technical Documentation
The default rounding mode is round to nearest. The four rounding modes are:

Round To Nearest

Round to the representable value closest to the true value. If two representable values are equally close to the true value, choose the one whose least significant bit is 0. ...

Mir ist bewusst, dass es Zahlenbeispiele gibt, welche die Verwendung des Sinnbildes rechtfertigen, aber man sollte dabei aufpassen, dass man den Gültigkeitsbereich nicht verlässt. Für Round(10.5) und Round(11.5) wird tatsächlich zur nächsten geraden Zahl gerundet, aber wie man sieht gilt das nicht mehr, wenn RoundTo(value, digit) mit digit = -2 verwendet wird. Hier sei kurz angemerkt, dass RoundTo() sich auf Round() abstützt und die FPU das letzte Wort hat - da ist kein weiterer Pascal Code beteiligt, als der zur Skalierung innerhalb von RoundTo().

Ich erinnere mich an eine Fundstelle (Crawford & Gelsinger: Programming the 80386), wo der von Intel implementierte default rounding mode ohne weitere Erklärungen als "round towards nearest or even" bezeichnet wurde. Die Original Intel Referenz habe ich gerade nicht griffbereit, aber ich vermute, dass es interessant wäre darin zu lesen.

Freundliche Grüße
  Mit Zitat antworten Zitat
 


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:07 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