[#1]
Programowanie FPU w SAS/C
Program napisany w C realizuje kompresję arytmetyczną z użyciem łańcuchów Markova. Używa liczb typu float. Jeśli zdefiniuję typ math=standard czy ieee lub fpp to jest dobrze. Mnie jednak interesuje FPU. Jeśli zdefiniuję math=68881 lub 2 to jest problem. Po resecie (co istotne używam WinUAE, +-JIT nic nie zmienia) jest błąd kompresji (jeden bajt na 512 KB jest inny). Po kolejnych użyciach jest dobrze. Po resecie to samo. Być może jest błąd emulatora, ale jest jeszcze coś. W kompresji matematycznej ważne są wyniki liczb zmiennoprzecinkowych, a więc precyzja oraz zaokrąglenia. Odpowiadają za to bity w rejestrze fpcr. Pytanie brzmi, co nadzoruje ten rejestr, czy ktoś go przechowuje, czy kompilator go ustawia? Zrobiłem eksperyment i w asmie ustawiałem różne precyzje tego rejestru co diametralnie zmienia wyniki obliczeń, a jednocześnie zmienia strumień bitowy po kompresji. Drugi problem to ostrzeżenie o braku właściwej math library mimo, że podaję mu scm.lib, scm881.lib.