Решил потестировать Wait на 0.00 секунд, а то вдруг какой-то сделает минимальную задержку, которая нужна для реального нанесения урона после срабатывания соответствующего события, либо приведения способности в действие. Но в очередной раз столкнулся с проблемой, которая в практическом смысле для меня ранее роли никакой не играла, но теперь просто хочется разобраться на всякий случай. Проблема в том, что не срабатывает для реальной переменной значение равно, когда ставлю меньше. Вот триггер:
По идее он должен досчитать на экране до 0.100 и остановиться, но он считает всякий раз до 0.110. Почему, ведь в условии указано, что считать дальше только при значении меньше 0.100, а не меньше или равно?
И TriggerSleepAction, и PolledWait минимально выдают 0.10 секунд при всех значениях меньше, но PolledWait при значении 0.00 выдаёт нулевую задержку, за время которой действие не успевает произойти. Если заглянуть в Function list, то там указано, что для всех значений больше 0 сделать то-то. Вот в этом случае больше корректно работает, а не как больше или равно.
И TriggerSleepAction, и PolledWait минимально выдают 0.10 секунд при всех значениях меньше, но PolledWait при значении 0.00 выдаёт нулевую задержку, за время которой действие не успевает произойти. Если заглянуть в Function list, то там указано, что для всех значений больше 0 сделать то-то. Вот в этом случае больше корректно работает, а не как больше или равно.
Принятый ответ
PT153:
PT153:Потому что число 0.01, сложенное 10 раз, меньше 0.1.
Выводи число следующим кодом, где r - твоё real число.
call DisplayTimedTextToPlayer(GetLocalPlayer(), 0., 0., 5., R2SW(r, 0, -1))
Hate:у парня проблемы с алгоритмом, в какой вселенной 0.01 * 10 не 0.1?В компьютерной. И да, 0.01 * 10 тоже может быть не равно 0.01 + ... + 0.01. Потому что складываются и умножаются real по-разному.
Hate, надо просто использовать целочисленные, или пользоваться ==, в JASS == округляет числа для сравнения (!= не округляет).
Пороверил разные варианты, сразу упомяну, что с целочисленными всё огонь, просто какие-то другие воспоминания с ними всплывали.
PT153, сначала не понял, зачем мне твоя строчка, она всего лишь выдавала 0.1 вместо 0.100, но тестировал разные варианты и всё прояснилось. Если задавать шаг 1.0, то всё исправно считается до 10.0, если задавать шаг 0.2, то всё считается до 2.2 и отображается ровно, но если сделать шаг 1.01, то вот тут и появляется то, ради чего ты эту строчку дал.
PT153, сначала не понял, зачем мне твоя строчка, она всего лишь выдавала 0.1 вместо 0.100, но тестировал разные варианты и всё прояснилось. Если задавать шаг 1.0, то всё исправно считается до 10.0, если задавать шаг 0.2, то всё считается до 2.2 и отображается ровно, но если сделать шаг 1.01, то вот тут и появляется то, ради чего ты эту строчку дал.
Именно с дробной частью косяк, и теперь не знаю как выбрать лучший ответ, по идее у тебя в каждом комментарии полезная информация. Просто объединил их в итоге.
Hate:
сначала прибавляет, а затем проверяет, потом удивляется почему 0.11
Обычно просто отшучиваюсь на подобные комментарии, но сейчас так всё грустно в нём, что не смогу.
Загруженные файлы
`
ОЖИДАНИЕ РЕКЛАМЫ...
Чтобы оставить комментарий, пожалуйста, войдите на сайт.
Утром посмотрю.
call DisplayTimedTextToPlayer(GetLocalPlayer(), 0., 0., 5., R2SW(r, 0, -1))
Отредактирован PT153
Отредактирован 8gabriel8
PT153, сначала не понял, зачем мне твоя строчка, она всего лишь выдавала 0.1 вместо 0.100, но тестировал разные варианты и всё прояснилось. Если задавать шаг 1.0, то всё исправно считается до 10.0, если задавать шаг 0.2, то всё считается до 2.2 и отображается ровно, но если сделать шаг 1.01, то вот тут и появляется то, ради чего ты эту строчку дал.
Отредактирован PT153
R2SW(r, 0, -1) я вынес в отдельную функцию, назвал её R2SX.