Форум программистов, компьютерный форум CyberForum.ru

Нереальная разница при использовании int и double - C++

Восстановить пароль Регистрация
 
Kastaneda
Модератор
Эксперт С++
 Аватар для Kastaneda
4236 / 2769 / 218
Регистрация: 12.12.2009
Сообщений: 7,104
Записей в блоге: 1
Завершенные тесты: 1
15.12.2010, 17:37     Нереальная разница при использовании int и double #1
Писал код в параллельную ветку, случайно наткнулся на такое, вот код:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
#include<iostream>
#include<cmath>
int main(){
    const int array[10]={12,32,-123,235,-456,2134,-123,56,-132,756};
    int count=0;
    double geom_mean=1.;
    for(int i=0;i<10;i++)
        if(array[i]>=0){
            geom_mean*=array[i];
            ++count;
        }    
        geom_mean=pow(geom_mean,1./(double)count);    
        std::cout<<"Geometric mean : "<<geom_mean<<std::endl;
    return 0;    
}
находит среднее геометрическое, ну не важно, речь не об этом. В общем если geom_mean типа double, то результат вычислений 141.868, а если сделать типа int то результат 30 )
Найти объяснение этому так и не смог. Может кто-нибудь объяснит?
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
15.12.2010, 17:37     Нереальная разница при использовании int и double
Посмотрите здесь:

в чем разница между int a и int *a? C++
В чем разница между int main(){} и int main(void){}? C++
Double, int , long double C++
в чем разница между int(a) и (int)a? C++
Ошибка при компиляции error: cannot convert ‘int (*)[5]’ to ‘int**’ for argument ‘1’ to ‘void Replase(int**)' C++
C++ Разница в использовании конструкторов
C++ Неверный результат при преобразования типов данных static_cast<int>(double)
Преобразовать 2 числа int в 1 число float(double) | double int1.int2 C++

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
valeriikozlov
Эксперт C++
 Аватар для valeriikozlov
4660 / 2486 / 321
Регистрация: 18.08.2009
Сообщений: 4,550
15.12.2010, 17:48     Нереальная разница при использовании int и double #2
Все нормально получается:
При таком массиве geom_mean в конце цикла становится равным 8152734965760.
Для типа double такое число нормально. А для типа int начинается переполнение еще при незаконченном цикле и в результате результат в конце получается неправильный.
Kastaneda
Модератор
Эксперт С++
 Аватар для Kastaneda
4236 / 2769 / 218
Регистрация: 12.12.2009
Сообщений: 7,104
Записей в блоге: 1
Завершенные тесты: 1
15.12.2010, 17:50  [ТС]     Нереальная разница при использовании int и double #3
Точно, я не учел, что результат такой большой получится, массив то "с закрытыми глазами" забивал)
Yandex
Объявления
15.12.2010, 17:50     Нереальная разница при использовании int и double
Ответ Создать тему
Опции темы

Текущее время: 12:54. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru