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

Dziwna (?) sytuacja z funkcja pow

Ostatnio zmodyfikowano 2014-10-11 13:18
Autor Wiadomość
Geniusz
Temat założony przez niniejszego użytkownika
Dziwna (?) sytuacja z funkcja pow
» 2014-10-09 21:35:02
Witam. Natchnąłem się na taką sytuacje podczas pisania programu i nie rozumiem dlaczego zmienna A ma wartość 99 zamiast 100. Mógłby mi to ktoś wytłumaczyć ?

C/C++
#include <iostream>
using namespace std;

#include <cmath>

int main()
{
    // Wiem, że funkcja pow przyjmuje argumenty typu double i zwraca wartość typu double
    // ale chciałbym się dowiedzieć dlaczego program / funkcja
    // tak się zachowuje z argumentami typu int i przypisaniem zwracanej wartości do zmiennej typu int
    int A = pow( 10, 2 );
    int B = pow( 10.0, 2.0 );
    double C = pow( 10, 2 );
    double D = pow( 10.0, 2.0 );
   
    cout << A << endl; // 99 Dlaczego ???
    cout << B << endl; // 100
    cout << C << endl; // 100
    cout << D << endl; // 100
}
P-118189
akwes
» 2014-10-09 21:40:19
W czym to kompilujesz?

http://ideone.com/rBuT1N

100
100
100
100
P-118190
Geniusz
Temat założony przez niniejszego użytkownika
» 2014-10-09 22:01:12
CodeBlocks 13.12
GNU GCC

Czyli to zależy od kompilatora.


99
100
100
100

Process returned 0 (0x0)   execution time : 0.953 s
Press any key to continue.
P-118192
akwes
» 2014-10-09 22:04:26
Z ciekawości zapytam, jaki system? Linux?
P-118193
Geniusz
Temat założony przez niniejszego użytkownika
» 2014-10-09 22:06:13
Windows XP
P-118194
akwes
» 2014-10-09 22:09:35
Znalazłem, że było na to kilka bugów w glibc (czyli bibliotece dostarczającej standardowych funkcji)libm. Musisz najprawdopodobniej poszukać po prostu nowej wersji glibclibm (jak to wygląda dla CodeBlocks nie wiem, być może wystarczy pobrać nowszą wersję CB?).
P-118195
Geniusz
Temat założony przez niniejszego użytkownika
» 2014-10-11 13:18:32
Niesamowite jak zmienienie typu jednej zmiennej w programie z int na double zapobiegło wywalaniu błędu po kompilacji. Wersję CodeBlocks mam najnowszą, z tego co się orientuję. Co do tego libm to nie bardzo wiem skąd mogę to pobrać, żeby mieć pewność, że to jest odpowiednia wersja.
P-118247
« 1 »
  Strona 1 z 1