ďťż

Ładny brzuch

Witam wszystkich. Mam oto takie zadanie do rozwikłania:

Liczby rzeczywiste zakodowane w formacie zmiennoprzecinkowym należą do skończonego zbioru wartości. Czyli jest tak mała liczba dodatnia, że mniejsza od niej jest zerem. Program wyznacza metodą numeryczną - trzeba ją wymyślić - najmniejszą dodatnią liczbę rzeczywistą typu Single, Real (=Double) i Exteneded.
Nie wiem czy dobrze rozumuję :P ale czy chodzi o to, żeby np. dzielić podaną liczbę przez użytkownika przez ... 2 ? aż dojdzie się do zera?
Proszę o jakieś wskazówki, podpowiedzi, uwagi... Dzięki...



tak wpadlem na to z marszu, i nie wiem jak to sie ma do praktyki...

zacznij np od 1 i dziel ja przez 2 dopoki nie otrzymasz 0
dlaczego przez 2, bo mamy pzeciez system dwojkowy, a kazda liczba w pamieci jest prezentowana przeciez za pomoca 1 i 0
oczywiscie ostatnia liczba ktora nie byla 0 bedzie Twoja najmniejsza liczba

jeszce raz podkreslam, ze to tylko propozycja
ktora mozna z reszta sprawdzic w praktyce :)
Użytkownik fernandez edytował ten post 30 październik 2007, 20:44

tak wpadlem na to z marszu, i nie wiem jak to sie ma do praktyki...

zacznij np od 1 i dziel ja przez 2 dopoki nie otrzymasz 0
dlaczego przez 2, bo mamy pzeciez system dwojkowy, a kazda liczba w pamieci jest prezentowana przeciez za pomoca 1 i 0
oczywiscie ostatnia liczba ktora nie byla 0 bedzie Twoja najmniejsza liczba

jeszce raz podkreslam, ze to tylko propozycja
ktora mozna z reszta sprawdzic w praktyce :)


...zrobiłem takie coś

program numer; var j: Real; begin WriteLn('Podaj liczbe'); ReadLn(j); while j <> 0 do begin j:=j/2; WriteLn('REAL: ',j); end; ReadLn; end.

po wpisaniu jakiejkolwiek liczby (Real) "wyskakuje" zawsze to samo:


...
REAL: 8.349709414717067E-322
REAL: 4.150151425066471E-322
REAL: 2.075075712533235E-322
REAL: 1.037537856266618E-322
REAL: 4.940656458412465E-323
REAL: 2.470328229206233E-323
REAL: 9.881312916824931E-324
REAL: 4.940656458412465E-324
REAL: 0.000000000000000E+000


Teraz pytania ? ;) Czy to jest w porządku - program ? i np. 4.940656458412465E-324 jest mniejsze niż 9.881312916824931E-324 ?
Dzieląc przez np. 3 wynik taki sam... Z góry dzięki za wszystkie wskazówki, podpowiedzi, uwagi...

WriteLn('REAL: ',j:0:4);




WriteLn('REAL: ',j:0:4);
za duzo sobie nie zobaczy przy 4-ech miejscach po przecinku :P

to chyba dobrze skoro wynik jest taki sam przy kazdej liczbie, o to przeciez chodzilo :)

najbezpieczniejsze jest dzielenie przez 2 ze wzgeldu na system dwojkowy - wszystko przeciez dzieje sie na bitach
to ze akurat przy dzielenieu przez 3 tez wychodzi taki wynik to przypadek - zobacz jak algorytm zachowa sie w przypadku gdy bedziesz dzielil innymi liczbami


4.940656458412465E-324 jest mniejsze niż 9.881312916824931E-324 ?
oczyiwscie 4 jest mniejsze od 9 chyba nie :P


.po wpisaniu jakiejkolwiek liczby (Real) "wyskakuje" zawsze to samo:

Teraz pytania ? ;) Czy to jest w porządku - program ? i np. jest mniejsze niż 9.881312916824931E-324 ?
Dzieląc przez np. 3 wynik taki sam... Z góry dzięki za wszystkie wskazówki, podpowiedzi, uwagi...


4.940656458412465E-324 to 4.94065... pomnozone do 10^324 - czyli tak, bardzo mala liczba. 9..., chyba logiczne ze jest wieksze ;)

  • zanotowane.pl
  • doc.pisz.pl
  • pdf.pisz.pl
  • zsf.htw.pl
  •