Pages: 1
Почему тип переменной влияет на вычисляемую скорость
Построил простую модель состоящую из Source - Queue - Service - Sink
Модельное время - минуты
Есть параметр СкоростьПриемки с первоначальным значением 5000

В элементе Service "Время задержки" определяется как 60/СкоростьПриемки
Если тип параметка СкоростьПриемки double то все работает правильно.
Если тип изменить на int, то задержки практически нет.

Аналогично есть разница, если в поле "Время задержки" написать вручную задержку в 0.012, то работает правильно.
Но если написать в этом поле выражение 60/5000, то задержки опять практически нет.

Почему так?
Добрый день, Юрий.
Этот вопрос рассмотрен в Справке: http://www.anylogic.ru/anylogic/help/topic/com.xj.anylogic.help/html/code/Expressions.html

Quote
Результат деления в Java зависит от типов операндов. Если оба операнда - целые числа, то результат будет тоже целым. Поэтому непреднамеренное использование целочисленного деления может привести к существенной потере точности. Чтобы произвести обычное деление, получив в качестве результата вещественное значение, в Java нужно явно указать, что хотя бы один из операндов является вещественным числом.
60 и 5000 — это целые числа, значит результат их деления тоже будет целым, то бишь равным 0 (т.н. целочисленное деление). А когда вы явно указываете тип параметра double, то получаем деление целого числа на вещественное, и результат тоже будет вещественным — 0.012.

Также целое число превращается в вещественное, если после него поставить точку. Например, 60 — это целое число (int), a 60.0 — вещественное (double). 60 / 5000 = 0, a 60.0 / 5000 = 0.012.

Поэтому в обоих случаях всё работает правильно.

Кстати, блок Queue перед блоком Service избыточен, поскольку Service обладает собственной очередью.
Спасибо большое за подробный ответ.

Прочитал Вас и указанный раздел справки и понял.

Но для новичков как-то более сильно надо заострять внимание на этом. Например, в модели работы банкомата.
В книге Боева "Компьютерное моделирование" в модели банкомата стр.123-125 предлагается время
задержки изменить на следующее распределение:

в source - exponential (1/2)
в delay - exponential (1/3)

Но с такими параметрами модель просто не работает. А работает как указали Вы с точкой - "exponential (1./2)" "exponential (1./3)"

Для Java все правильно, но для меня как пользователя - это было не понятно. Особенно при вычислениях внутри элемента service,
когда время задержки задается выражением с указанием параметра: 60/СкоростьПриемки
Pages: 1
Users browsing this topic (2 guests, 0 registered, 0 hidden)