Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Клуб программистов > Свободное общение
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 14.05.2009, 21:00   #1
Levsha100
Заблокирован
Старожил
 
Регистрация: 20.07.2008
Сообщений: 4,032
По умолчанию 4-3=2 Версия Delphi...

Просто нет слов...
Код:
  ShowMessage( IntToStr( Round(3.5) - Round(2.5) ) );
Levsha100 вне форума Ответить с цитированием
Старый 14.05.2009, 21:13   #2
Neeter
Форумчанин
 
Аватар для Neeter
 
Регистрация: 22.02.2009
Сообщений: 875
По умолчанию

Я так заметил, что если число перед точкой четное, то округление идет к минимальному, а если нечетное - то к максимальному значению...
Чтобы обнаруживать ошибки, программист должен иметь ум, которому доставляет удовольствие находить изъяны там, где, казалось, царят красота и совершенство.
Neeter вне форума Ответить с цитированием
Старый 14.05.2009, 21:22   #3
Sazary
В тени
Старожил
 
Аватар для Sazary
 
Регистрация: 19.12.2008
Сообщений: 5,788
По умолчанию

Из справки Делфи:
Цитата:
X is a real-type expression. Round returns an Int64 value that is the value of X rounded to the nearest whole number. If X is exactly halfway between two whole numbers, the result is always the even number. This method of rounding is often called "Banker’s Rounding".
Это называют "округление банкира". То есть если число посередине, то округляется к четному.
Вполне очевидно, чтобы что-то понять, необходимо книги читать.
Не нужно плодить бессмысленных тем. Вас Поиск избавит от многих проблем.

___________________________________ ___________________________________ _______
[=Правила форума=]_____[Поиск]_____[Литература по С++]____[Литература. Паскаль]
Sazary вне форума Ответить с цитированием
Старый 14.05.2009, 21:25   #4
ROD
Linux C++ Qt ARM
Старожил
 
Аватар для ROD
 
Регистрация: 30.11.2008
Сообщений: 3,030
По умолчанию

Цитата:
То есть если число посередине, то округляется к четному.
Хотя в математике .5 округляют в большую сторону, всегда.
Дилетант широкого профиля.

"Слова ничего не стоят - покажите мне код!" © Линус Торвальдс
ROD вне форума Ответить с цитированием
Старый 14.05.2009, 21:28   #5
Sazary
В тени
Старожил
 
Аватар для Sazary
 
Регистрация: 19.12.2008
Сообщений: 5,788
По умолчанию

Цитата:
Сообщение от ROD
Хотя в математике .5 округляют в большую сторону, всегда.
Ну это в математике
Вполне очевидно, чтобы что-то понять, необходимо книги читать.
Не нужно плодить бессмысленных тем. Вас Поиск избавит от многих проблем.

___________________________________ ___________________________________ _______
[=Правила форума=]_____[Поиск]_____[Литература по С++]____[Литература. Паскаль]
Sazary вне форума Ответить с цитированием
Старый 14.05.2009, 21:31   #6
crazy horse
ios developer
Старожил
 
Аватар для crazy horse
 
Регистрация: 16.11.2007
Сообщений: 2,885
По умолчанию

Цитата:
ShowMessage( IntToStr( Round(3.5) - Round(2.5) ) );
Эта беда не только дельфей касается. Это скорее особенность представления десятичных чисел в камнях, там получается что-то вроде не х.5, а х.4(9). Поправьте, если я ошибаюсь. В целом, рекомендуется не применять подобный подход, а выполнять округление в конце вычислений - уже над результатом. Просто необходимо помнить об этой особенности и быть поосторожней.
Зы. пока писал пост - впереди появилось еще 3) ну уж извиняйте.
Делайте что хотите, но чтобы через полчаса в лесу было светло, сухо и медведь!
crazy horse вне форума Ответить с цитированием
Старый 14.05.2009, 21:42   #7
ACE Valery
Сама себе режиссер
Старожил
 
Аватар для ACE Valery
 
Регистрация: 27.04.2007
Сообщений: 3,365
По умолчанию

Что-то похожее есть в JavaScript
Выражение parseInt((0.1+0.7)*10) выдает ответ 7. Пробовала просто делать 0.1+0.7 выдает ответ 0.799999999999... Причем 0.1+0.3 будет 0.4, а 0.7+0.3 будет 1. То есть вроде как правильно.
Если я вас напрягаю или раздражаю, вы всегда можете забиться в угол и поплакать
ACE Valery вне форума Ответить с цитированием
Старый 14.05.2009, 22:01   #8
Levsha100
Заблокирован
Старожил
 
Регистрация: 20.07.2008
Сообщений: 4,032
По умолчанию

Мда, косяки даже в таких ГИГАНТАХ... Вспоминаеться слово быдлокодеры
Скоро будет 2+2~=6 (в десятичной системе )... бАНКИРЫ рулят...
Дожились.
//---------------------
Просто это тупо, а что если эта операция, при физическом моделировании... А я то думал почему самолеты так часто падают....

Последний раз редактировалось Levsha100; 14.05.2009 в 22:12.
Levsha100 вне форума Ответить с цитированием
Старый 14.05.2009, 22:24   #9
rpy3uH
добрый няша
Старожил
 
Аватар для rpy3uH
 
Регистрация: 29.10.2006
Сообщений: 4,804
По умолчанию

Банковское округление было ещё в Delphi 7. Ничего удивительного, вполне нормальное округление, даже лучше чем обычное математическое. Такое округление нужно чтобы после округления число было чётное и было проще разделить на 2.
rpy3uH вне форума Ответить с цитированием
Старый 14.05.2009, 22:38   #10
Levsha100
Заблокирован
Старожил
 
Регистрация: 20.07.2008
Сообщений: 4,032
По умолчанию

Мне кажеться это ненормально. Причем тут 2? Может будем округлять к нечетному, чтобы делить на 3, или будем приближать к 5, чтобы делить на 5?
Levsha100 вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Версия Windows!!! ORBIUS Windows 6 25.01.2009 14:05
C++ Builder 6 обр.версия GreenDan Свободное общение 4 29.08.2008 16:45
Почему лицензионная версия продукта дороже чем пиратская версия продукта? multik Свободное общение 13 13.07.2008 14:40
WinDVD 7- РУССКАЯ ВЕРСИЯ!!! supervideo Софт 2 21.12.2007 05:47