Podczas obliczeń konwersja do decimal nie jest potrzebna. Nie potrzebujesz przewidywalności, jedynem celem tych algorytmów jest prezentacja człowiekowi danych i nic więcej. Ten problem z utrudnioną prezentacją niektórych liczb jest wyłacznie problemem estatycznym.
Za pomocą liczb float nie da się tego w ogólnym przypadku uzyskać i nie ma to nic wspólnego z prezentacją. Prezentacja z "błędami" to tylko proba estatycznego zamiatania pod dywan problemów z mantysą.
Nie da się. Rozwinięcia bywają nieskończone lub niepraktycznie długie bez względu na wybór mantysy.
To tylko efekt warstwy prezentacji lub innego sposobu trzymania mantysy. W ogólnym przypadku w dowolnie wymyslonej reprezentacji nie da się zapisać dowolnej liczny, nawet wymiernej, bo pamięci zabraknie. Można albo oszukiwac przy wyświetlaniu albo modyfikować mantysę aby zadowolić jakąs grupę (jak dziesietne mantysy w IEE754-2008).
Pewne substytuty mozna uzyskać licząc symbolicznie i odraczając dzielenia ale to nie jest zawsze możliwe. Mówiąc wprost każde obliczenia floating point są obarczone błędem. Trzeba z tym żyć i nauczyć się go minimalizować.
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 :-)
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.
ElectronDepot website is not affiliated with any of the manufacturers or service providers discussed here.
All logos and trade names are the property of their respective owners.