różny efekt programu

0

Dla danych a=3 b=4 c=5 program wyswietla else, natomiast gdy wkleje go w wizualizator kodu to wyswietla sie tak jak powinno. Co decyduje o tej roznicy? Dodam ze uzywajac iloczynu zamiast funkcji pow wynik jest prawidlowy.

#include <iostream>
#include <cmath>

using namespace std;

int main() {

   int a,b,c;
   cin>>a>>b>>c;

    if (pow(a,2)+pow(b,2)==pow(c,2))
        cout << "Mozna zbudowac trojkat prostokatny\n";
    else
        cout << "Nie mozna zbudowac trojkata prostokatnego\n";



    return 0;
}
0
Dregorio napisał(a):

@micw https://ideone.com/DywQgz

no właśnie, a w eclipsie wyswietla warunek else

0

Sprawdź dokładnie, bo wygląda, że jest OK.

0
lion137 napisał(a):

Sprawdź dokładnie, bo wygląda, że jest OK.

tez mi to sie wydawalo niemozliwe ale wlasnie sciagnalem inne IDE niz Eclipse i dziala tak jak powinno

1

To cieszę sie, bo w przeciwnym przypadku, moglibyśmy patrzyć czy gwiazdy nie gasną:)

1
micw napisał(a):

Dodam ze uzywajac iloczynu zamiast funkcji pow wynik jest prawidlowy.

pow(a,b) realizowany jako exp(b*log(a) czyli obliczenie przybliżone (nie koniecznie dokładne), zawierające dziesiątki mnożeń, dzieleń i dodawań.
dla b<=3 zalecane zwykłe mnożenie.

https://math.stackexchange.com/questions/137994/fourier-transform-of-log-x-xs-and-logx
http://mathworld.wolfram.com/FourierTransformExponentialFunction.html

Tu może prostsze wyjasnienie: https://en.wikipedia.org/wiki/Euler%27s_continued_fraction_formula

Doprawdy wolicie te dwa obliczenia zamiast a*a?

2

Nigdy nie powinno się używać pow(cokolwiek, 2) albo pow(cokolwiek, 0.5) albo pow(cokolwiek, 3) albo pow(cokolwiek, 1.0/3) (to ostanie to już zupełny strzał w stopę).
Są to powolne rozwiązania i na dodatek obarczone większymi błędami obliczeń (tak jak opisał dragon).

Tak samo w liczbach zmiennoprzecinkowych wynik obliczeń nie powinien być porównywany operatorem ==. Jako, że liczby zmiennoprzecinkowe mają ograniczoną precyzję, rzeczy które matematycznie są sobie równe, nie muszą być równe w wyniku błędów zaokrągleń.

1 użytkowników online, w tym zalogowanych: 0, gości: 1