Wpis z mikrobloga

#programowanie #programista15k #programista #matematyka

Mam zaćmienie mózgu może pomożecie, bo nawet nie wiem jak o to spytać googla. Zawiesiłem się pisząc program na wydaje mi się prostej rzeczy, a mianowicie: jako wynik mogę dostać liczbę zmiennoprzecinkową np. 0.5 jak sprawdzić (nie iterując od 0 do nieskończoności) przez, co pomnożona ta liczba da liczbę całkowitą, gdzie ten mnożnik będzie najmniejszą z możliwych liczb spełniającą tą zależność (oczywiście wiem że są takie które nie dadzą nigdy liczby całkowitej) czyli jak dla przykładowej 0.5 dostać liczbę 2 przez którą pomnożone 0.5 daje liczbę całkowitą ?
  • 20
  • Odpowiedz
  • Otrzymuj powiadomienia
    o nowych komentarzach

via Wykop Mobilny (Android)
  • 0
@HefiDL: poczekaj, otrzymujesz liczbe zmiennoprzecinkową i potrzebujesz znaleźć dla niej dowolną liczbę całkowitą, przez pomnozenie której otrzymasz wynik całkowity?
  • Odpowiedz
@HefiDL: a tak na poważnie nie podałeś czy to ma być pierwsza kolejna liczba calkowita, pierwsza mniejsza, czy dowolna. kolejnym rozwiązaniem zamiast *0 to *10 do skutku.
  • Odpowiedz
via Wykop Mobilny (Android)
  • 0
@HefiDL: nie wiem jak bardzo Ci zależy na wydajności ale najprostsze rozwiązanie to pętla po liczbach całkowitych od 0 do jakiegoś limitu i sprawdzanie czy wyniki z mnożenia twojego 'x' z kolejną liczba całkowita dają liczbę całkowitą. A w tym celu możesz zastosować sprawdzenie warunku w stylu:
if (wynik == int(wynik))
  • Odpowiedz
@bmLq: hmm , ja pisalem by mnożyl do skutku lrzez 10 więc chyba. nie do mnie ta odpowiedź:) pojawiły sie nowe wytyczne wiec moje pomysly z mnozeniem przez 10 i 0 odpadły.
  • Odpowiedz
Liczba zmiennoprzecinkowa jest zapisana jako x * 2^y, gdzie x należy do (1,2). Przykładowo 0,625 = 1,25*2^(-1). Pamiętaj, że operacje na liczbach zmiennoprzecinkowych mają swoją dokładność.
  • Odpowiedz
Liczba zmiennoprzecinkowa zapisana binarnie składa sie z mantysy i wykladnika (E).

Mantysa jest z zakresu [1, 2]. Liczysz jak długie jest ułamkowe rozwinięcie binarne mantysy (dajmy na to N). Liczba przez która potrzebujesz pomnozyc to 2 ^ (max(N - E, 0)).

Złożoność stała dla dowolnej liczby zmiennoprzecinkowej.
  • Odpowiedz
via Wykop Mobilny (Android)
  • 4
@HefiDL: mam pomysł. Weź liczbę zmienna przecinkowa, odetnij cześć całkowita. Część po przecinku skroc do najmniejszego dzielnik - dzielnik ten to będzie twój wynik.

Z twojego przykladu:
0.625 -> 625/1000 -skracamy-> 5/8

8 to
  • Odpowiedz