Форум программистов, компьютерный форум, киберфорум
Наши страницы

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

Войти
Регистрация
Восстановить пароль
 
Kastaneda
Jesus loves me
Эксперт С++
4689 / 2893 / 236
Регистрация: 12.12.2009
Сообщений: 7,357
Записей в блоге: 2
Завершенные тесты: 1
#1

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

15.12.2010, 17:37. Просмотров 996. Ответов 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 )
Найти объяснение этому так и не смог. Может кто-нибудь объяснит?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
15.12.2010, 17:37
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Нереальная разница при использовании int и double (C++):

Борьба с погрешностью при сравнивании double с int - C++
В моей программе происходит много действий с вещественными числами, а потом ответ (тоже вещественное число) сравнивается с целочисленным...

Преобразовать 2 числа int в 1 число float(double) | double int1.int2 - C++
Всем привет. Изучая азы C++, столкнулся с такой проблемой. Есть два значения типа int, их необходимо преобразовать в одно значение типа...

Неверный результат при преобразования типов данных static_cast<int>(double) - C++
Доброго времени суток, уважаемые программисты! Перейду сразу к сути проблемы: При данном значении вещественной переменной n (n=0.13) в...

В чем разница между long int и short int - C++
Извините если вопрос нубский, но я ни как не могу понять смысл long int и short int. Например с unsingned все ясно. Один байт в int...

в чем разница между int(a) и (int)a? - C++
Собственно в этом и вопрос.

в чем разница между int a и int *a? - C++
люди подскажите начинающему... чем переменная отличается от указателя? допустим переменные int a char a ? и переменные int *a, char...

2
valeriikozlov
Эксперт С++
4673 / 2499 / 321
Регистрация: 18.08.2009
Сообщений: 4,550
15.12.2010, 17:48 #2
Все нормально получается:
При таком массиве geom_mean в конце цикла становится равным 8152734965760.
Для типа double такое число нормально. А для типа int начинается переполнение еще при незаконченном цикле и в результате результат в конце получается неправильный.
1
Kastaneda
Jesus loves me
Эксперт С++
4689 / 2893 / 236
Регистрация: 12.12.2009
Сообщений: 7,357
Записей в блоге: 2
Завершенные тесты: 1
15.12.2010, 17:50  [ТС] #3
Точно, я не учел, что результат такой большой получится, массив то "с закрытыми глазами" забивал)
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
15.12.2010, 17:50
Привет! Вот еще темы с ответами:

Double, int , long double - C++
Как вычислить диапазоны типов вручную указанных в название темы?

Ошибка при компиляции error: cannot convert ‘int (*)[5]’ to ‘int**’ for argument ‘1’ to ‘void Replase(int**)' - C++
#include &lt;iostream&gt; #include &lt;ctime&gt; #include &lt;iomanip&gt; #include &lt;cstdlib&gt; #define row 5 #define col 5 using namespace...

В чем разница между int main(){} и int main(void){}? - C++
Только недавно начал изучать язык, и появилось несколько вопросов: 1) в чем разница между int main(){} и int main(void){}? 2) в чем...

int const и const int в чем разница этих записей - C++
Попалась мне тут программа для выборочно сортировки, с ней все в принципе ясно, но я в ней встретил записи, которые раньше не встречал,...


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

Или воспользуйтесь поиском по форуму:
3
Ответ Создать тему
Опции темы

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