[avr-gcc] zaokraglanie :))

Feb 15, 2005 26 Replies

krotko i zwiezle !! czasem prostych rzeczy sie nie zauwaza :)) nie rozumiem tych dysput ponizej :) niektorzy nie doczytali mojego problemu :) dzieki wielkie

Aaa, racja! EOT - problem rozwiązany :) (spróbuję jeszcze znaleźć dziurę w całym).

Jeszcze mała wzmianka, w końcu udało mi się napisać tak, aby to pokazać:

#include <stdio.h>

unsigned int myround(double a) { return (unsigned int) (a+0.5); }

int main( void ) { float a=0.1, b=0.7; printf( "%d\n", myround( (a+b)*10+0.5 ) ); return 0; }

Ma to związek ze skończoną reprezentacją liczb, więc wychodzi 8, a nie

9, ale to już nie wina samej metody, która jest dobra. Niestety było mi stracić sporo czasu na takim właśnie problemie (zamiast 8 wychodziło 7.(9) ).

Pozdrawiam.

U¿ytkownik "£ukasz Góralczyk" snipped-for-privacy@goraNOSPAMlczyk.com napisa³ w wiadomo¶ci news:cuvi80$e43$ snipped-for-privacy@nemesis.news.tpi.pl...

Znowu masz jakies zacmienie - 0.1 + 0.7 to jest 0.8 wiec dlaczego mialoby wyjsc 9?

Krzysiek Rudnik

(0.1+0.7)*10 da 7.(9), do tego dodac 0.5 wyjdzie 8.4(9), funkcja zaokragli to do 8 (tak liczy kompter). W rzeczywistosci powinno byc: (0.7+0.7)*10 da 8, do tego dodac 0.5 wyjdzie 8.5, to sie zaokragla do 9 (tak liczy matematyka).

PS.

7.(9) = 7.99999...

no bo 0.7 w komputerze nie ma dokładnej reprezentacji. Niestety na to trzeba zwracać uwagę.

A matematycznie to 7.(9) == 8

Waldek

Dnia 2/16/2005 6:52 PM, Użytkownik Łukasz Góralczyk napisał:

Hmmm, metody numeryczne miałem dawno ale z tego co pamiętam to

8.5 będzie się zaokrąglało do 8, w górę było by wtedy jak na dalszych nieznaczących pozycjach wystąpi coś > 0 (?)

sword

Join the Discussion

Have something to add? Share your thoughts — no account required.

Didn't find your answer?

Ask the community — no account required