0 / 0 / 0
Регистрация: 23.01.2015
Сообщений: 8
|
|||||||||||
1 | |||||||||||
Программа неправильно считает11.07.2015, 01:08. Просмотров 3127. Ответов 9
Метки нет Все метки)
(
Здравствуйте.
Объясните пожалуйста такой парадокс. Ниже привожу решение одной из задач из книги Лафоре по переводу десятичных фунтов в её старую систему фунтов: Вот код одного из вариантов программы (который неправильно высчитывает шиллинги)
А теперь меняем тип переменной shillings с int на float в 13 строке:
Кто-то может объяснить, почему так происходит?
0
|
|
11.07.2015, 01:08 | |
программа неправильно считает
Программа неправильно считает |
|
13702 / 7327 / 1749
Регистрация: 30.01.2014
Сообщений: 12,277
|
||||||
11.07.2015, 01:46 | 2 | |||||
0
|
284 / 171 / 86
Регистрация: 19.04.2014
Сообщений: 1,102
|
|
11.07.2015, 01:51 | 3 |
Потому что decpounds равен 8.649999..., а не 8.65
В итоге 0.64 * 20 = 12
0
|
0 / 0 / 0
Регистрация: 23.01.2015
Сообщений: 8
|
|
11.07.2015, 11:16 [ТС] | 4 |
В случае, когда decpounds = 8.649999... и при присвоении теряется дробная часть - это понятно. Но тогда возникает другой вопрос. Почему decpounds = 8.649999... если я присваиваю переменной 8.65?
0
|
|
11.07.2015, 11:38
#5
|
0
|
0 / 0 / 0
Регистрация: 23.01.2015
Сообщений: 8
|
|
11.07.2015, 15:53 [ТС] | 6 |
да, интересная штука...при сложении float v = 1000 и 1E-6 снова получается 1000. И в результате я ещё больше запутался.
где об этом можно поподробнее прочитать, чтоб самому разобраться? Я имею ввиду, о представлении вещественного числа и почему в С++ такие фокусы получаются.
0
|
Don't worry, be happy
|
|
11.07.2015, 16:28 | 7 |
Товарищ Evg уже написал Представление вещественных чисел "на пальцах"
0
|
Заблокирован
![]() |
|
11.07.2015, 16:45 | 8 |
lomaxe, советую прочитать
https://ru.wikipedia.org/wiki/... ей_запятой http://habrahabr.ru/post/112953/
0
|
16 / 16 / 14
Регистрация: 11.04.2015
Сообщений: 50
|
|
15.07.2015, 10:55 | 9 |
тип переменной int (он же integer) работает только с целыми числами, иными словами, при получении числа с дробной частью это самое число округляется до ближайшего целого.
Тип float использует переменные с плавающей точкой, т.е. по умолчанию округляет число до 2 знаков в дробной части, если явно не задано колличество дробных знаков. Могу конечно ошибаться, университетский курс программирования уже давненько закончил, мало что помню из него
0
|
284 / 171 / 86
Регистрация: 19.04.2014
Сообщений: 1,102
|
|
15.07.2015, 15:55 | 10 |
0
|
15.07.2015, 15:55 | |
Заказываю контрольные, курсовые, дипломные и любые другие студенческие работы здесь. Программа неправильно считает напряжение (U) Почему программа неправильно считает сумму? Программа неправильно считает длину вектора Программа без синтаксических ошибок, но иногда считает неправильно Коллеги,в программе должно считать выделенные элементы. Считает программа неправильно(должно быть 69.Подскажитегдеошибка Неправильно считает Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |