2015-08-08 1 views
1

Я тестировал функцию Pow() в C++Почему C++ думает, что 8^1/3 = 1?

#include <iostream> 
#include <cmath> 

using namespace std; 

int main() 
{ 
    cout << pow(8,(1/3)) << endl; 
    return 0; 
} 

По какой-то причине, это возвращает 1. Почему это происходит?

+0

Проверить "целочисленное деление". Попробуйте напечатать результат '1/3' – SJuan76

+1

Потому что C++ знает, что он делает. –

+3

Почему вы протестировали функцию 'pow', но не потрудились проверить, что такое' 1/3'? –

ответ

7

Это потому, что 1/3 оценивается целыми числами. Результатом разделения является 0, поэтому pow(x, 0) производит 1.

Изменение деления до деления в парном разряде, как это:

cout << pow(8,(1.0/3)) << endl; // prints 2 as expected 

Demo.

2

1/3 целочисленное результат 0

1

, когда вы используете целые числа в качестве входных данных для пау (), компьютер усекает вывод. При вводе чисел с плавающей точкой ошибка будет исправлена ​​

Pow (8, 1/3) = 1

Pow (8,0, 1,0/3) = 2

+2

Результаты целочисленного разделения усечены, а не перекрыты. –

+0

Абсолютно правильно. терминология усечения против пола более правильная, хотя результат тот же –

+0

В этом случае результат будет таким же, но не для отрицательных чисел. –