Zacząłem próbować kod w WinAVR zrobić i zauważyłem niezgodność.
Z wykorzystaniem 64 bitowych liczb wynik jest prawidłowy, ale wygenerowany kod miał 4 206 B. Jego wykonanie zajęło 6 210 cykli. Oczywiście przy tych liczbach największy kod generuje dzielenie dwóch 64bit-owych liczb, wykorzystując do tego dużo dodatkowej pamięci.
Identyczny kod jak Adama w WinAVR dał wynik (u mnie jest dłuższy ze względu na przerwania)
Kod: (108+768);
Cykle: (13+742);
Niestety trudno długość kodu w tym przypadku porównywać, bo kompilowany jest bez żadnej optymalizacji (ustawiona na 0). Uruchomienie kompilacja, automatycznie powoduje czę pre-kompilator wyrzuca liczenie tej wartość, gdyż nie jest nigdzie więcej już używana. Jej użycie też nic nie zmienia, bo tedy pre-kompilator po prostu ją sobie wylicza (wszystkie dane są podane) i podstawia gotową wartość.
Dokładność uzyskałem taką samą, wynika to z faktu za małej dokładność zmiennej typu froat. W WinAVR użycie double nic nie zmienia, ale niektóre kompilatory mają ten typ danych dokładniejszy.
Adamie:
1) Sprawdź czy uda Ci się uzyskać dokładniejszy wynik z użyciem Double;
2) Podaj jaki uzyskasz kod po wyłączeniu optymalizacji.
Z wykorzystaniem 64 bitowych liczb wynik jest prawidłowy, ale wygenerowany kod miał 4 206 B. Jego wykonanie zajęło 6 210 cykli. Oczywiście przy tych liczbach największy kod generuje dzielenie dwóch 64bit-owych liczb, wykorzystując do tego dużo dodatkowej pamięci.
Identyczny kod jak Adama w WinAVR dał wynik (u mnie jest dłuższy ze względu na przerwania)
Kod: (108+768);
Cykle: (13+742);
Niestety trudno długość kodu w tym przypadku porównywać, bo kompilowany jest bez żadnej optymalizacji (ustawiona na 0). Uruchomienie kompilacja, automatycznie powoduje czę pre-kompilator wyrzuca liczenie tej wartość, gdyż nie jest nigdzie więcej już używana. Jej użycie też nic nie zmienia, bo tedy pre-kompilator po prostu ją sobie wylicza (wszystkie dane są podane) i podstawia gotową wartość.
Dokładność uzyskałem taką samą, wynika to z faktu za małej dokładność zmiennej typu froat. W WinAVR użycie double nic nie zmienia, ale niektóre kompilatory mają ten typ danych dokładniejszy.
Adamie:
1) Sprawdź czy uda Ci się uzyskać dokładniejszy wynik z użyciem Double;
2) Podaj jaki uzyskasz kod po wyłączeniu optymalizacji.
--= SWL SP6-01-396 =--

