Mam kolejny i chyba raczej mniej typowy problem natury matematyczno-informatycznej ...
Potrzebuję obliczać wartość X, którą należy wpisać w 32 bitowy rejestr (4 bajty) aby aby urządzenie generowało precyzyjnie częstotliwość jaką chcę uzyskać.
Wartość X jaką trzeba wpisać żeby urządzenie generowało wymaganą częstotliwość f liczy się z wzoru :
X= ( f * 2do32 ) / 125000000
przy czym f może zawierać wartości od 1 do 40000000 max.
Pierwsze co przychodzi na myśl to 2do32 podzielić przez 125000000 i tą stałą mnożyć przez f ....
Ale pojawia się problem precyzji i ograniczeń wielkości liczb w 8-mio bitowcach ...
2do32 / 125000000 = 34,35673815 a więc mamy kilka cyferek po przecinku .....
Jeśli obetniemy to co po przecinku będziemy mieli błąd około 1 % więc będzie to błąd zauważalny .....
Co robić w przypadkach ?
Z zapisem 32 bitowej liczby problemu nie ma, ale jak to policzyć praktycznie żeby było bez błędu ...
Teoretycznie żeby błąd był minimalny powinno się wyliczyć X i dopiero po wyliczeniu odrzucić część po przecinku jeśli taka się pojawi.
Czyli dla max wartości X to będzie:
34,35673815 x 40000000 = 1374269526 natomiast :
34 x 40000000 = 1360000000 a więc różnica dość spora .......
Jak sobie z takimi problemami radzą lepsi od mnie ?
