5231 / 3204 / 362
Регистрация: 12.12.2009
Сообщений: 8,113
Записей в блоге: 2
1

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

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

Author24 — интернет-сервис помощи студентам
Писал код в параллельную ветку, случайно наткнулся на такое, вот код:
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
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
15.12.2010, 17:37
Ответы с готовыми решениями:

Написать функцию int Search ( double A[], int n , double x), которая находит в массиве double A[n] элемент, значение которого равно x
Написать функцию int Search ( double A, int n , double x), которая находит в массиве double A...

При умножении значения double на int и присвоения его результата на double, результат выходит неправильным
Здравствуйте. Есть такая проблема. При умножении значения double на int и присвоения его результата...

разница при использовании С и С++
Здравствуйте. В книгах по системному программированию под Linux примеры приводятся на Си. А если...

В чём разница при использовании разных методов?
1: Часто замечаю что используют пути для поиска по разному, но чем они отличаются ( то есть...

2
Эксперт С++
4727 / 2548 / 757
Регистрация: 18.08.2009
Сообщений: 4,568
15.12.2010, 17:48 2
Все нормально получается:
При таком массиве geom_mean в конце цикла становится равным 8152734965760.
Для типа double такое число нормально. А для типа int начинается переполнение еще при незаконченном цикле и в результате результат в конце получается неправильный.
1
5231 / 3204 / 362
Регистрация: 12.12.2009
Сообщений: 8,113
Записей в блоге: 2
15.12.2010, 17:50  [ТС] 3
Точно, я не учел, что результат такой большой получится, массив то "с закрытыми глазами" забивал)
0
15.12.2010, 17:50
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
15.12.2010, 17:50
Помогаю со студенческими работами здесь

Ошибка округления при использовании float или double
Да-да, избитая тема. Понятно, что любое нецелое число может быть представленно в современных...

При рисовании конвертировать double в int
нужно dx и dy поменять на double и при рисовании конвертировать double в int подскажите пожалуйста...

Есть ли существенная разница при использовании PCI-E 16X или 8X?
Вопрос состоит в следующем. Нигде, ни в каких тестах не могу найти, есть ли существенная разница...

Ошибка при считывании double в переменную int
Добрый день.Столкнулся с такой проблемой Если мы попробуем ввести в переменную типа int дробное...

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

Перевод из double в int (ошибка при переводе)
При переводе некого получившегося числа из double в int, выводится неправильное число. Не могу...


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

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

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru