Ilość cyfr w części całkowitej liczby zmiennoprzecinkowej, zapisanej binarnie

0

Dzień dobry.

Potrzebuję wyciągnąć liczbę cyfr przed przecinkiem (część całkowita) liczby zmiennoprzecinkowej, zapisanej binarnie przy pomocy 4 składników (niestety 4-go nie do końca rozumiem, ale chyba nie jest potrzebny). Mam takie przykłady:

+--
  liczba       reprezentacja         przykład
  1.0          (0, 1, 0, 1)          (-1)^0 * 1    * 2^0    = 1
  10.0         (0, 5, 1, 3)          (-1)^0 * 5    * 2^1    = 10
  10.25        (0, 41, -2, 6)        (-1)^0 * 41   * 2^(-2) = 41/4 = 10.25
  123456.0     (0, 1929, 6, 11)      (-1)^0 * 1929 * 2^6    = 1929 * 64 = 123456.0

Ostatni parametr, to chyba liczba bitów mantysy (znak, mantysa, wykładnik, nbits). Ale do rzeczy.
Czy można w jakiś sposób, bez wymnażania policzyć liczbę cyfr części całkowitej liczby zapisanej w ten sposób? Czy muszę wymnożyć?

Dzięki

PS.
Wiem, że liczbę cyfr można policzyć przy pomocy log10, ale trzeba mieć liczbę do przekazania. A jak mam tylko mantysę i wykładnik? Muszę obliczyć liczbę, czy mogę jakoś wywróżyć :D ?

0

Najprościej jest mając funkcję przekształcającą liczbę na tekst (co pewnie i tak będzie potrzebne) uciąć tekst na przecinku (kropce) i pobrać długość tekstu..

0

Ilość cyfr wyniku mnożenia liczb o M i N cyfr będzie M+N lub M+N-1 w zależności od liczb, żeby wiedzieć na pewno musisz je przemnożyć. Jeśli wystarczy Ci wynik +/- 1 to wystarczy zsumować liczbę cyfr mantysy i 2 podniesionego do potęgi wykładnika
liczbę cyfr 2^n można wg google określić jako

1+floor(n*log10(2))

a liczbę cyfr w liczbie (mantysie) jako:

ceil(log10(n+1))

czyli:

ceil(log10(mantysa+1)) + 1 + floor(wykladnik * 0.30102999566398)

powinno dać przybliżony z dokładnością do jednego wynik (pewnie nie działa dla przypadków skrajnych ale nie chce mi się testować). Sprawdziłem dla Twoich przykładów i wzór daje poprawny wynik dla 3/4 przypadków i wynik o 1 za duży dla pierwszego przypadku.

Tak czy inaczej to całkiem sporo operacji do wykonania, więc dlaczego po prostu nie przemnożyć zwyczajnie liczby, uzyskać wynik i policzyć liczbę cyfr żeby mieć 100% dokładność?

0
mpaw napisał(a):

Wiem, że liczbę cyfr można policzyć przy pomocy log10, ale trzeba mieć liczbę do przekazania. A jak mam tylko mantysę i wykładnik? Muszę obliczyć liczbę, czy mogę jakoś wywróżyć :D ?

A jakbyś rozwinął log10 z szeregu taylora (niech wreszcie się matematyka na coś przyda) ? Ale tak żeby nie działał na liczbach rzeczywistych tylko na tej twojej dziwnej strukturze?

1 użytkowników online, w tym zalogowanych: 0, gości: 1