Ĺ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
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 ;)