cerrato

no ale to już lekkie przegięcie. Mogłeś chociaż ze 2 zdania dodać od siebie, a nie jedynie wrzucić link do strony. Poza tym do umieszczania linków mamy inne miejsce - Ciekawe linki :P

lion137

Żebym ja pamiętał o jakimś wątku o ciekawych linkach:) widzę coś fajnego wrzucam na mikrobloga, daję tag links i do przodu:)

cerrato

Nie wykręcaj się - ten wątek jest nawet przyklejony w kategorii Off-topic :P

lion137

Ale Masz racje, temat jest ważny, zedytuję jakoś wpis, żeby zachęcić do przeczytania.

cerrato

@furious programming: chociaż raz nie będą się śmiali z Pascala, żadnych złośliwych docinków itp ;) W podanym linku, zarówno Pascal, jak i Delphi nie mają żadnego przekłamania i dają wynik 3.0000000000E-01 oraz 3.00000000000000E-0001. Jesteśmy lepsi niż C++, które zwraca 0.30000000000000004

furious programming

@cerrato: nie wiem czy jest się z czego cieszyć, dlatego że binarna reprezentacja liczb zmiennoprzecinkowych jest we wszystkich podanych językach identyczna (zgodna ze standardem IEEE 754), więc całe to porównanie nie dotyczy fizycznej precyzji liczb, a jedynie rezulatów funkcji konwertujących, wypluwanych na ekran konsoli. Ewentualnie jest to porównanie domyślnych optymalizacji. ;)


Linijka typu WriteLn(0.1 + 0.2) to bzdura, bo takie wyrażenie zostanie zoptymalizowane i zamienione na konkretną wartość, przez co w konsoli wyskoczy równiutkie 0.3 (co jest nieprawdą).

Aby sprawdzić jaki jest prawdziwy wynik takiego wyrażenia, wystarczy wyłączyć optymalizacje i już dostaniemy 3.00000000000000000011E-0001. Przy włączonych optymalizacjach należy skorzystać ze zmiennych:

var
  One: Double = 0.1;
  Two: Double = 0.2;
begin
  Write(One + Two);
end.

Wynikiem pod FPC jest 3.0000000000000002E-001, czyli też niefajnie. A taki kod:

var
  One: Double = 0.5;
  Two: Double = 0.2;
begin
  Write(One - Two);
end.

da na wyjściu 2.9999999999999999E-001 – niefajnie w drugą stronę.

Wszystkie trzy ww. wyniki są jak najbardziej prawidłowe, natomiast podlinkowane porównanie robił jakiś gamoń. :d

cerrato

Dzięki za zgłębienie tematu. Mi szczerze mówiąc się nie chciało i oparłem się na tym, co było w podlinkowanym wpisie. I teraz pytanie - albo koleś miał jakieś inne założenia/ustawienia, albo zrobił to źle. Bo jego wynik różni się od tego, co Ty podałeś.

furious programming

Miał włączone optymalizacje, dlatego dostał okrągły wynik.