Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.75/4: Рейтинг темы: голосов - 4, средняя оценка - 4.75
0 / 0 / 0
Регистрация: 23.02.2013
Сообщений: 16

Неправильная конвертация типов в MVS С++ 2008

03.05.2013, 22:20. Показов 875. Ответов 6
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Скажите, почему в Microsoft Visual Studio 6 результатом программы
C++
1
2
3
4
5
6
7
double r1=1.12;
double r2=1.13;
int c;
c=100*r2 - 100*r1;
cout<<"100*r1="<<100*r1<<"\n";
cout<<"100*r2="<<100*r2<<"\n";
cout<<"c="<<c;
было:
100*r1=112
100*r2=113
с=1

А при запуске этой программы в Microsoft Visual Studio 2008 результат стал таким:
100*r1=112
100*r2=113
с=0
Причём, если знак “-“ поменять на “+” то в результате будет
100*r1=112
100*r2=113
с=225

Такое вообще может быть или это глюк пиратского софта?
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
03.05.2013, 22:20
Ответы с готовыми решениями:

Не компилирует в MVS 2008
Господамы вот такая программа для проверки устного умножения в MVS 2008 ругается на time, srand и rand, в чем может быть проблема? ...

Настройки в MVS 2008
1.Если не затруднит, скажите как убрать полный путь к ошибке в настройках. Если я выразился не ясно - вот пример: ...

MVS 2008 открытие проекта
Ребят пытаюсь открыть MVS 2008 проект .sln подписан он Version (unrecognized version), при открытие выдает: The selected file is a...

6
11 / 11 / 2
Регистрация: 07.03.2010
Сообщений: 465
03.05.2013, 22:55
Лицензионная студия 2012 года) Тоже без понятия что за)
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
#include "iostream"
 
using namespace std;
int main ()
{
double r1=1.12;
double r2=1.13;
int c=0;
cout<<"c="<<c<<endl;
c=100*(r2 -r1);
cout<<"100*r1="<<100*r1<<"\n";
cout<<"100*r2="<<100*r2<<"\n";
cout<<"c="<<c<<endl;
system ("PAUSE");
}
Но в моем случае компилятор ругается, что возможна потеря данных при преобразовании типа!
0
DU
1500 / 1146 / 165
Регистрация: 05.12.2011
Сообщений: 2,279
03.05.2013, 22:56
при арифметике с плавающей точкой всегда есть погрешность.
вывод эту погрешность может округлять, но при операциях она не округляется и потом при касте дабла к инту это сказывается. если точность вывода увеличить, то можно увидеть более точные значения. в дебаге тоже можно увидеть:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
#include <iostream>
 
using namespace std;
 
int main()
{
  double r1=1.12;
  double r2=1.13;
  double r1r2 = 100*r2 - 100*r1;
  int c = r1r2;
 
  cout.precision(50);
  cout<< "100*r1=" <<100*r1<<"\n";
  cout<< "100*r2=" <<100*r2<<"\n";
  cout<< "r1r2="   <<r1r2<<"\n";
  cout<< "c="      <<c;
 
  return 0;
 
}
100*r1=112.0000000000000100000000000000
100*r2=112.9999999999999900000000000000
r1r2=0.9999999999999715800000000000000
c=0
Press any key to continue . . .
1
Модератор
Эксперт по электронике
8981 / 6748 / 921
Регистрация: 14.02.2011
Сообщений: 23,871
03.05.2013, 23:09
для того чтобы правильно округлить при переводе в int необходимо добавить 0.5
вот так у тебя сработает без ошибок округления
C++
1
c=(int)(100*r2 - 100*r1+0.5)
1
11 / 11 / 2
Регистрация: 07.03.2010
Сообщений: 465
03.05.2013, 23:10
Кхм, а почему именно 0.5? теперь мне интересно)
0
Модератор
Эксперт по электронике
8981 / 6748 / 921
Регистрация: 14.02.2011
Сообщений: 23,871
03.05.2013, 23:21
Цитата Сообщение от kristi1 Посмотреть сообщение
Кхм, а почему именно 0.5? теперь мне интересно)
по правилам математики ну и компьютера
при переводе в целочисленное дробная часть отбрасывается хоть там будет 0.9999999999
по правилам математики число меньшее чем х.5 округляется в меньшую сторону иначе в большую
пробуем
2.5+0.5=3.0 =3
2.9+0.5=3.4=3
2.1+0.5=2.6=2
2.4+0.5=2.9=2

Добавлено через 4 минуты
на этом основано округление например тебе нужно округлить до 2 знака
умножаем на 100 добавляем 0.5 приводим к int и делим на 100
до третьего знака 1000 ну и так далее
например
C++
1
2
3
double a=3.1415926;
int m=a*100+0.5;
a=m/100; // a=3.14
1
11 / 11 / 2
Регистрация: 07.03.2010
Сообщений: 465
03.05.2013, 23:22
Логичка ясна, спасибо)
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
03.05.2013, 23:22
Помогаю со студенческими работами здесь

Нужен пример использование CheckBox в MVS 2008
Покажите пожалуйста пример использование checkbox в MVS 2008. Ситуация следующая: при выборе определенного checkbox должно выполнятся...

Как создать принципиальную схему в MVS 2008 Ee?
Иногда встречаю в книгах схемы работы программы в виде разного рода квадратиков, ромбов, прямоугольников, кружочков, соединенных...

Где скачать MVS c++ 2008 express edition?
Помогите, пожалуйста, скачать microsoft visual studio c++ 2008 express edition, только не с сайта Майкрософт и не маленькую программу в 2...

Как подключить libpcap к проекту MVS 2008
Всем привет. Дали задание написать сниффер используя библиотеку libpcap. Саму библу я скачал версия libpcap-1.1.1. Теперь возникла проблема...

Где найти файл помогания MVS C++ 2008 e-edition?
Подскажите, пожалуйста, где можно скачать файл помощи MVS C++ 2008 Express edition? А то у меня помощь что-то не работает, выделяю функцию,...


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

Или воспользуйтесь поиском по форуму:
7
Ответ Создать тему
Новые блоги и статьи
Программная установка даты и запрет ее изменения
Maks 02.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "СписаниеМатериалов", разработанного в конфигурации КА2. Задача: при создании документов установить период списания автоматически. . .
Вывод данных в справочнике через динамический список
Maks 01.04.2026
Реализация из решения ниже выполнена на примере нетипового справочника "Спецтехника" разработанного в конфигурации КА2. Задача: вывести данные из ТЧ нетипового документа. . .
Функция заполнения текстового поля в реквизите формы документа
Maks 01.04.2026
Алгоритм из решения ниже реализован на нетиповом документе "ВыдачаОборудованияНаСпецтехнику" разработанного в конфигурации КА2, в дополнении к предыдущему решению. На форме документа создается. . .
К слову об оптимизации
kumehtar 01.04.2026
Вспоминаю начало 2000-х, университет, когда я писал на Delphi. Тогда среди программистов на форумах активно обсуждали аккуратную работу с памятью: нужно было следить за переменными, вовремя. . .
Идея фильтра интернета (сервер = слой+фильтр).
Hrethgir 31.03.2026
Суть идеи заключается в том, чтобы запустить свой сервер, о чём я если честно мечтал давно и давно приобрёл книгу как это сделать. Но не было причин его запускать. Очумелые учёные напечатали на. . .
Модель здравосоХранения 6. ESG-повестка и устойчивое развитие; углублённый анализ кадрового бренда
anaschu 31.03.2026
В прикрепленном документе раздумья о том, как можно поменять модель в будущем
10 пpимет, которые всегда сбываются
Maks 31.03.2026
1. Чтобы, наконец, пришла маршрутка, надо закурить. Если сигарета последняя, маршрутка придет еще до второй затяжки даже вопреки расписанию. 2. Нaдоели зима и снег? Не надо переезжать. Достаточно. . .
Перемещение выделенных строк ТЧ из одного документа в другой
Maks 31.03.2026
Реализация из решения ниже выполнена на примере нетипового документа "ВыдачаОборудованияНаСпецтехнику" с единственной табличной частью "ОборудованиеИКомплектующие" разработанного в конфигурации КА2. . . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru