|
|
Регистрация Восстановить пароль |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
|
Опции темы | Поиск в этой теме |
01.10.2012, 21:05 | #1 |
Пользователь
Регистрация: 10.06.2012
Сообщений: 22
|
Неверное деление (3/2=1)
В программе есть инструкция, в котором 1 делится на n. Но я заметил, что в итоге ответ неверный. Для проверки ввёл переменную float tmpp и инструкцию tmpp=3/2; Выполнил трассировку и увидел такую картину (скриншот).
Решил поставить другие числа. В итоге 4/2=2, 1/2=0, 1/n=0 и т.д. Такое ощущение, что специально отбрасывается число после запятой (как будто это int). Среда программирования- Embarcadero RAD Studio XE2 P.S. Пока писал сообщение на форум, решил сделать так Код:
|
01.10.2012, 21:12 | #2 |
Старожил
Регистрация: 13.07.2012
Сообщений: 6,342
|
3 и 2 это int числа. Целочисленное деление отрезает дробную часть.
Обойти можно скажем так: 2.0 / 2.0 это уже float числа и результат будет тоже float |
01.10.2012, 21:21 | #3 |
Пользователь
Регистрация: 10.06.2012
Сообщений: 22
|
Хм... ясно. Спасибо)
Видимо я никогда не присваивал float переменной деление целых чисел (делил только дробные). Поэтому не знал об этом нюансе. Я так полагаю, что 2.0/2 результат float? (это для уточнения)) |
01.10.2012, 21:31 | #4 |
Форумчанин
Регистрация: 17.12.2011
Сообщений: 111
|
В этом случае результат int
|
01.10.2012, 22:24 | #5 |
МегаМодератор
СуперМодератор
Регистрация: 09.11.2010
Сообщений: 7,341
|
Axrik, вы уверены, что деление 2.0/2 имеет тип Int? Типы же приводятся к большему (конечно есть множество оговорок).
http://algcourse.cs.msu.su/wp-conten...tions04-05.pdf С 21 страницы и далее про приведение
Пишите язык программирования - это форум программистов, а не экстрасенсов. (<= это подпись )
Последний раз редактировалось BDA; 01.10.2012 в 22:29. |
01.10.2012, 22:33 | #6 | |
Старожил
Регистрация: 31.05.2010
Сообщений: 13,543
|
Цитата:
Результат 3/2 и 3.0/2.0 будет разным по одной постой причине. В первом случае деление происходит с целочисленными величинами и мантисса отбрасывается 3/2 = 1. Во-втором случае, вычисляется значение типа float или double (смотря как объялена переменная, которой присваивается результат). И он будет соответствовать - 1.5.
Пиши пьяным, редактируй трезвым.
Справочник по алгоритмам С++ Builder Последний раз редактировалось Smitt&Wesson; 01.10.2012 в 22:35. |
|
01.10.2012, 22:36 | #7 |
МегаМодератор
СуперМодератор
Регистрация: 09.11.2010
Сообщений: 7,341
|
Smitt&Wesson, именно это я и пытаюсь донести до Axrik.
Пишите язык программирования - это форум программистов, а не экстрасенсов. (<= это подпись )
|
01.10.2012, 22:38 | #8 |
Старожил
Регистрация: 31.05.2010
Сообщений: 13,543
|
Я так и понял, только несколько "размыто" для новичков доносите .
Пиши пьяным, редактируй трезвым.
Справочник по алгоритмам С++ Builder |
01.10.2012, 23:21 | #9 |
C++ hater
СтарожилДжуниор
Регистрация: 19.07.2009
Сообщений: 3,333
|
и совсем не поэтому. 3.0/2.0 даст тип double. 3.0f/2.0f даст тип float. переменная, к которой присваивается результат может быть объявлена как угодно, хоть char, просто к ней неявно приведется полученный результат (если неявное приведение возможно).
I invented the term Object-Oriented, and I can tell you I did not have C++ in mind. (c)Alan Kay
My other car is cdr. Q: Whats the object-oriented way to become wealthy? A: Inheritance |
01.10.2012, 23:53 | #10 |
Форумчанин
Регистрация: 17.12.2011
Сообщений: 111
|
На практике у меня выходил именно тип int. А вообще спасибо, ценная информация)
|
|
Опции темы | Поиск в этой теме |
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Выдает неверное число | ZoomHz | Общие вопросы C/C++ | 2 | 07.03.2012 17:26 |
Неверное определение размера файла? | _SERGEYX_ | Свободное общение | 2 | 17.11.2010 13:28 |
Неверное выполнение программы вычисления | green-tree | Помощь студентам | 2 | 20.08.2010 09:40 |