Goto page Previous 1, 2, 3
HF5BS
Guest
Mon Dec 05, 2016 3:21 am
Użytkownik "RoMan Mandziejewicz" <roman@pik-net.pl.invalid> napisał w
wiadomości news:1054345892.20161205010009@pik-net.pl.invalid...
Quote:
Spectrum też miał błąd w arytmetyce, tylko nie pamiętam, jakich liczb
dotyczył - bliskich 1?
Np. 1.01-1=0.009999998
Tak pokazał emulator.
To samo 2.01-2, ale już 2.02-2=0.02.
--
....Ja biorę na siebie schody, znajdę je skubane i skopię im poręcz
tak, że nie będą wiedziały, którędy na górę. (C) Osioł ze Shreka.
RoMan Mandziejewicz
Guest
Mon Dec 05, 2016 10:29 am
Hello HF5BS,
Monday, December 5, 2016, 3:21:35 AM, you wrote:
Quote:
Spectrum też miał błąd w arytmetyce, tylko nie pamiętam, jakich liczb
dotyczył - bliskich 1?
Np. 1.01-1=0.009999998
Tak pokazał emulator.
To samo 2.01-2, ale już 2.02-2=0.02.
Nie - to co pokazujesz, to jest sprawa gównianej precyzji. Był grubszy
błąd związany z interpretacją 5-bajtowego zapisu.
--
Best regards,
RoMan
Nowa strona:
http://www.elektronika.squadack.com (w budowie!)
J.F.
Guest
Mon Dec 05, 2016 12:57 pm
Użytkownik "RoMan Mandziejewicz" napisał w wiadomości grup
dyskusyjnych:644861882.20161205102940@pik-net.pl.invalid...
Hello HF5BS,
Monday, December 5, 2016, 3:21:35 AM, you wrote:
Quote:
Spectrum też miał błąd w arytmetyce, tylko nie pamiętam, jakich
liczb
dotyczył - bliskich 1?
Np. 1.01-1=0.009999998
Tak pokazał emulator.
To samo 2.01-2, ale już 2.02-2=0.02.
Nie - to co pokazujesz, to jest sprawa gównianej precyzji. Był
grubszy
błąd związany z interpretacją 5-bajtowego zapisu.
Precyzja Spectrum nie odbiegala jakos bardzo od innych maszych w tych
czasach, przynajmniej na liczbach typu "float" :-)
Mowa byla o C64 ... tam nie wiem, ale cos mi chodzi po glowie, ze
atari uzywalo formatu zmiennoprzecinkowego z uzyciem BCD.
To takich "bledow" tam nie bedzie, beda inne :-)
J.
Janusz_k
Guest
Mon Dec 05, 2016 7:06 pm
W dniu 2016-12-03 o 19:26, HF5BS pisze:
Quote:
Użytkownik "J.F." <jfox_xnospamx@poczta.onet.pl> napisał w wiadomości
news:phapwfedlpal$.b77f1vi5x2g5.dlg@40tude.net...
Dnia Sat, 3 Dec 2016 01:22:11 +0100, HF5BS napisał(a):
Co do matematyki - w C64 odejmij 5.2-5... Wynik <>0.2... (kiedyś mi
przez
ten błąd jeden program liczący odległości pokazywał kompletne
bzdury). Radzę
sobie wtedy, mnożąc elemeny działania przez 10 i o tyleż dzieląc wynik,
wyjdzie OK.
Hm, jesli w C64 nie spieprzyli czegos mocno, to wynik nie powinien
bardzo odbiegac od 0.2. Co jak co, ale odleglosci powinny sie liczyc
No, tak bardzo nie odbiegał. Ale czegoż wymagać od liczby zaledwie
5-bajtowej? Problem był głównie w tym, że właśnie granica 0.2 była
podziałem między obszarami. Wynik poniżej 0.2 zaliczał obiekt do
położonego w sąsiednim obszarze. Najlepsze, że spowodowało to w końcu
zaliczenie położenia, do obszaru, który nie istnieje. Mimo, że wyliczona
odległość nie była specjalnie różniąca się od właściwej. Musiałem
zastosować wybieg, gdzie cząstki odejmowania pomnożyłem najpierw przez
10, wykonałem odejmowanie i wtedy wynik podzieliłem przez 2, co już dało
oczekiwane 0.2.
Bo to był Twój błąd w programie wynikający z braku znajomości
reprezentacji liczb rzeczywistych, takich liczb się NIE porównuje
tylko bada czy mieści się w danym zakresie, jakbyś wynik badał
np: czy mieści się >0,19 <0,21 to byś nie miał problemów.
Prawie każdy początkujący programista się wykłada na porównaniu liczb float.
--
Pozdr
Janusz_k
Goto page Previous 1, 2, 3