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

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
Kastaneda
Форумчанин
Эксперт С++
4514 / 2856 / 228
Регистрация: 12.12.2009
Сообщений: 7,249
Записей в блоге: 1
Завершенные тесты: 1
#1

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

15.12.2010, 17:37. Просмотров 939. Ответов 2
Метки нет (Все метки)

Писал код в параллельную ветку, случайно наткнулся на такое, вот код:
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
Посмотрите здесь:
C++ Неверный результат при преобразования типов данных static_cast<int>(double)
в чем разница между int(a) и (int)a? C++
в чем разница между int a и int *a? C++
Double, int , long double C++
int const и const int в чем разница этих записей C++
В чем разница между int main(){} и int main(void){}? C++
C++ Разница в использовании конструкторов
Разница результатов float и double C++
В чем разница между Double и Float? C++
C++ int* to double*
C++ double в int
C++ int и double

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

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

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru