![]() |
|
|
Регистрация Восстановить пароль |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
![]() |
|
Опции темы | Поиск в этой теме |
![]() |
#1 |
Пользователь
Регистрация: 29.04.2007
Сообщений: 66
|
![]()
Если выполнить действие 1/3 то получим значение 0.333~3
Если полученное число умножить на 3, то получаем значение 0.999~9 Подскажите код. При выполнении которого в ответе будет получаться единица. |
![]() |
![]() |
![]() |
#2 |
Сисадмин
Форумчанин
Регистрация: 28.12.2007
Сообщений: 320
|
![]()
Наверное, round(1/3*3)
|
![]() |
![]() |
![]() |
#3 |
Пользователь
Регистрация: 29.04.2007
Сообщений: 66
|
![]()
Не совсем. round округляет число до ближайшего целого значения. Мне же нужна именно поправка, срабатывающая при очень незначительной разнице.
|
![]() |
![]() |
![]() |
#4 |
Участник клуба
Регистрация: 12.10.2007
Сообщений: 1,204
|
![]()
Кронос, нет незначительной разницы. Есть округление, связанное с тем, что дробь 1/3 даже в десятичной системе счисления бесконечная, а мы пытаемся поместить ее в конечную ячейку памяти. (Большинство вещественных чисел непредставимы в виде конечных дробей в двоичной системе счисления).
------------------------------------ Если хотите получить точное значение, работайте только с целыми числами. Организуйте отдельную запись или класс, который будет хранить вещественное число в виде правильной дроби. Опишите все арифметические действия с такими числами. Вот тогда для этих чисел (1/3) * (3/1) будет равно (1/1). ------------------------------------------------ Кстати, для A ![]() A := 1/3; label1.Caption := floatToStr(A*3); показывает точную 1-цу, т.к floatToStr округляет до 15 знака (A на самом деле = 0,999999999999999944) extended дает 19 точных знаков. По-моему достаточно для любых применений. |
![]() |
![]() |
![]() |
#5 |
Старожил
Регистрация: 09.01.2008
Сообщений: 26,229
|
![]()
Кронос, всё далеко не так просто, как Вам кажется (и хотелось бы).. ;-(
проверьте такой пример: Код:
Вот, почитайте (букв много ;-) - но читать ОБЯЗАТЕЛЬНО!! Неочевидные особенности вещественных чисел и Загадки округления [hr] Алекс, не успел - Вы опять меня опередили.. ;-) Респект! ;-) |
![]() |
![]() |
![]() |
#6 |
Пользователь
Регистрация: 29.04.2007
Сообщений: 66
|
![]()
Спасибо за инфу.
|
![]() |
![]() |