Panel użytkownika
Nazwa użytkownika:
Hasło:
Nie masz jeszcze konta?

Błąd w potęgowaniu liczb

Ostatnio zmodyfikowano 2020-03-23 19:32
Autor Wiadomość
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ć?





C/C++
#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;
}
P-176460
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.
P-176463
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
P-176464
« 1 »
  Strona 1 z 1