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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 09.09.2008, 20:17   #1
[Smarik]
Веб-разработчик
Форумчанин
 
Аватар для [Smarik]
 
Регистрация: 16.01.2008
Сообщений: 451
По умолчанию round он же random

странная вещь round, решил округлить число 1.5 с целью проверки как он округлит...потом проверил 2.5 и заметил странную вещь, он округляет как захочет тобишь 1.5 до 2-х и 2.5 тоже до 2-х, почему так?
Код:
edit1.Text:=IntToStr(round(1.5))+','+IntToStr(round(2.5))+','+IntToStr(round(3.5))+','+IntToStr(round(4.5));
Я ваш новый друг, смиритесь!
[Smarik] вне форума Ответить с цитированием
Старый 09.09.2008, 20:24   #2
Alar
Александр
Администратор
 
Аватар для Alar
 
Регистрация: 28.10.2006
Сообщений: 17,501
По умолчанию

Да именно так. потому для точных вычислений нужно использовать trunc - отбрасывание дробной части.

А где здесь random?

Для рандома есть специальный термин - условно случайное.

Вообще про точность в случайных числах говорить сложно
Alar вне форума Ответить с цитированием
Старый 09.09.2008, 20:32   #3
eoln
Старожил
 
Аватар для eoln
 
Регистрация: 26.04.2008
Сообщений: 2,645
По умолчанию

Вообще-то всё что вы изучали в школе по поводу округления - лишь приближение. По правилам число с половиной должно округляться до следующего целого, если целая часть нечётная, иначе до предыдущего
1,5 - 2
2,5 - 2
3,5 - 4
4,5 - 4
eoln вне форума Ответить с цитированием
Старый 09.09.2008, 20:42   #4
Alar
Александр
Администратор
 
Аватар для Alar
 
Регистрация: 28.10.2006
Сообщений: 17,501
По умолчанию

eoln, а как официально называется это правило?
Alar вне форума Ответить с цитированием
Старый 09.09.2008, 20:48   #5
eoln
Старожил
 
Аватар для eoln
 
Регистрация: 26.04.2008
Сообщений: 2,645
По умолчанию

Alar, увы не помню (или не знаю), но на численных методах в универе мы это проходили. Даже вопрос такой был на зачёте.

добавлено
вот тут нашёл упоминание об этом, правило называется №3

Последний раз редактировалось eoln; 09.09.2008 в 20:55.
eoln вне форума Ответить с цитированием
Старый 09.09.2008, 21:07   #6
[Smarik]
Веб-разработчик
Форумчанин
 
Аватар для [Smarik]
 
Регистрация: 16.01.2008
Сообщений: 451
По умолчанию

мммм, теперь понятно, а то я никак не мог найти логики в его действиях.
Я ваш новый друг, смиритесь!
[Smarik] вне форума Ответить с цитированием
Старый 09.09.2008, 21:57   #7
puporev
Старожил
 
Регистрация: 13.10.2007
Сообщений: 2,740
По умолчанию

Вы бы школьную алгебру учили нормально и тогда Америку бы не открывали.
puporev вне форума Ответить с цитированием
Старый 10.09.2008, 14:36   #8
_Dmitry
Участник клуба
 
Аватар для _Dmitry
 
Регистрация: 02.09.2007
Сообщений: 1,193
По умолчанию

В "школьной" алгебре как раз всё однозначно: все половины округляются в большую сторону. Но если следовать этому правилу, то у бухгалтера никогда баланс не сойдётся. Поэтому, то, что написано выше называется бухгалтерским округлением.

Вот выдержка из help-а delphi для функции round
Цитата:
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".
_Dmitry вне форума Ответить с цитированием
Старый 10.09.2008, 15:31   #9
puporev
Старожил
 
Регистрация: 13.10.2007
Сообщений: 2,740
По умолчанию

Извините, _Dmitrty, но не соглашусь. Вот выдержка из алгебры:
Цитата:
Правило 3
Если отбрасывается цифра 5, а за ней нет и никогда не было значащих цифр, то последняя из сохраняемых цифр остаётся неизменной, если она чётная, и увеличивается на 1, если она нечётная.
puporev вне форума Ответить с цитированием
Старый 10.09.2008, 15:53   #10
Alar
Александр
Администратор
 
Аватар для Alar
 
Регистрация: 28.10.2006
Сообщений: 17,501
По умолчанию

Нас учили в школе, давно это было, что 2.5 нужно округлять до 3-х. Но недавно узнал о такой особенности, как округление до четного, потому в будущем буду использовать только отбрасывание остатка после запятой - Trunc

Не думал, что про такую простую функцию, как Round, придется перечитывать справочник "Основы delphi"

_Dmitry, привожу вашу цитату на русском, или то что там имелось ввиду -
Цитата:
функция Round округляет число с плавающей запятой (Number) до целого значения.

Округление использует банковские правила, где точная половина значения вызывает округление к четному числу:

12.4 округляется до 12
12.5 округляется до 12
12.6 округляется до 13

13.4 округляется до 13
13.5 округляется до 14
13.6 округляется до 14
http://delphibasics.ru/Round.php
Alar вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
random в С++ Swool Общие вопросы C/C++ 21 18.02.2012 21:55
Random Febreze Общие вопросы Delphi 2 28.04.2008 14:17
Random -10 +10 Veiron Общие вопросы Delphi 1 23.01.2008 17:23
Random Constellation БД в Delphi 2 10.01.2008 21:37
random Sanek_ntsk Общие вопросы Delphi 8 17.12.2007 21:54