Testowanie metody klasy - NaN
Ostatnio zmodyfikowano 2015-05-31 22:19
AndreaLishley Temat założony przez niniejszego użytkownika |
Testowanie metody klasy - NaN » 2015-05-31 20:58:53 Napisałem sobie taką metodę obliczająca pierwiastek równania kwadratowego: double pierwiastek2() { double delta = wsp_1 * wsp_1 - 4 * wsp_0 * wsp_2; if( delta < 0 ) { return 0 / 0; } else if( delta == 0 ) { return( - 2 * wsp_0 /( wsp_1 ) ); } else { return( 2 * wsp_0 /( - wsp_1 - sqrt( wsp_1 * wsp_1 - 4 * wsp_0 * wsp_2 ) ) ); } }
Do tego mam assert, którym chce sprawdzić czy dobrze działa ta metoda dla ujemnej delty assert( ts.pierwiastek2() == ???? );
I tu pojawia się pytanko, jak mam przetestować tę metodę? Co wstawić w assercie by działało elegancko? Nie wiem jaką inną wartość mógłbym zwrócić w przypadku ujemnej delty zamiast 0/0 i byłaby ona double'm. Jeśli ktoś ma jakiś lepszy pomysł chętnie spojrzę. |
|
Monika90 |
» 2015-05-31 21:24:56 Możesz zwracać NAN i testować za pomocą std::isnan(double) |
|
AndreaLishley Temat założony przez niniejszego użytkownika |
» 2015-05-31 21:34:58 Czyli tak? assert( std::isnan( tz.pierwiastek2() ) );
No dobrze to jeden sposób. Swoją drogą nawet o tym nie pomyślałem, bo zawsze testowałem właśnie w ten sposób, który opisałem. Dzięki. A gdybym chciał zrobić to tak jak zapisałem czyli porównać do jakiegoś double'a? |
|
Monika90 |
» 2015-05-31 22:04:30 Właśnie tak, a w funkcji: return NAN; bo 0/0 to jest dzielenie całkowite. Mogłoby być 0/0. ale NAN ładniej wygląda. A gdybym chciał zrobić to tak jak zapisałem czyli porównać do jakiegoś double'a? |
NaN jest z wyglądu podobny zupełnie do niczego, czyli jest różny od samego siebie. |
|
pekfos |
» 2015-05-31 22:06:07 else if( delta == 0 ) { return( - 2 * wsp_0 /( wsp_1 ) ); } else { return( 2 * wsp_0 /( - wsp_1 - sqrt( wsp_1 * wsp_1 - 4 * wsp_0 * wsp_2 ) ) ); }
|
Po co te rozróżnienie? I tak zwracasz tylko jeden pierwiastek. Do tego pierwszy warunek prawie nigdy się nie spełnia, przez niedokładność obliczeń. |
|
AndreaLishley Temat założony przez niniejszego użytkownika |
» 2015-05-31 22:19:30 Racja, dzięki za odpowiedzi. |
|
« 1 » |