Błąd w potęgowaniu liczb
Ostatnio zmodyfikowano 2020-03-23 19:32
W4ndzi Temat założony przez niniejszego użytkownika |
Błąd w potęgowaniu liczb » 2020-03-22 23:52:19 Witam, stworzyłem program który sprawdza, czy podane trzy liczby stanowią trójkę pitagorejską. Nie wiem dlaczego, program podając kwadrat największej liczby daje wynik o jeden mniejszy. Dlatego musiałem do największej liczby dodać jeden. Nie rozumiem dlaczego się tak dzieje, mógłby ktoś to wyjaśnić? #include <iostream> #include <math.h> #include <stdio.h>
using namespace std;
int a, b, c, potega = 2, wynik;
int main() { cout << "Podaj trzy liczby calkowite, a ja sprawdze czy sa to liczby pitagorejskie." << endl; cin >> a; cin >> b; cin >> c; if(( a >= b ) &&( a >= c ) ) { wynik = pow( b, 2 ) + pow( c, 2 ); a = pow( a, potega ); if( wynik == a + 1 ) { cout << "to jest trojka pitagorejska"; } else { cout << "to nie jest trojka pitaogerjsa"; } } else if(( b >= c ) &&( b >= a ) ) { wynik = pow( a, 2 ) + pow( c, 2 ); b = pow( b, 2 ); if( wynik == b + 1 ) { cout << "to jest trojka pitagorejska"; } else { cout << "to nie jest trojka pitaogerjsa"; } } else { wynik = pow( b, 2 ) + pow( a, 2 ); c = pow( c, 2 ); if( wynik == c + 1 ) { cout << "to jest trojka pitagorejska"; } else { cout << "to nie jest trojka pitaogerjsa"; } } getchar(); return 0; }
|
|
pekfos |
» 2020-03-23 18:42:28 pow() nie nadaje się do tego zastosowania. Wszystkie wersje tej funkcji operują na liczbach zmiennoprzecinkowych, a w kodzie nie masz tolerancji na błędy obliczeń, które mogą się wtedy pojawić. Użyj zwykłego mnożenia, będzie nawet krócej. |
|
W4ndzi Temat założony przez niniejszego użytkownika |
» 2020-03-23 19:32:11 Ok, zwykłe mnożenie działa, ale nadal tego nie rozumiem, dlaczego funkcja pow() nie działa poprawnie. Z niektórymi wynikami działała normalnie. Edit: Już rozumiem, zamiast int, powinno być double, dziękuję za pomoc zamykam. :D |
|
« 1 » |