Добавлен PT153
Заметил, что данные функции дают разные ответы при r = 9.9999, например.
function R2IX takes real r returns integer
local integer i = R2I(r)
if r - I2R(i) >= 1. then
return i + 1
endif
return i
endfunction
// Ответ: 9.
function R2IY takes real r returns integer
local integer i = R2I(r)
if r - I2R(i) == 1. then
return i + 1
endif
return i
endfunction
// Ответ: 10.
Почему так происходит? Какие операции сравнения (==, !=, >, <, >=, <=) лучше использовать для типа real?
`
ОЖИДАНИЕ РЕКЛАМЫ...
Чтобы оставить комментарий, пожалуйста, войдите на сайт.
В вц3 следует сравнивать с диапазоном. x <= z and x >= y. Либо с R2I(x * 10^y)
Подробнее можно прочитать, например, на хабре
Отредактирован Hodor
К примеру: 9.9999 станет 10.000, или 1.0001 станет 1.000
Отредактирован PT153
UrsaBoss, ты написал такую же функцию, что и у меня в вопросе (только разделил => на > и ==). Причём тут 9.9999/2?
Я повторю вопросы ещё раз:
Отредактирован Hodor
Отредактирован PT153
Мне и 4-х цифр после запятой хватит, да и вопрос не в этом, но источник информации хочется узнать.
А насчет 4 чисел после запятой - отсюда xgm.guru/p/wc3/w3datatypes
Из строчки "Константно может быть задан в виде числа с точкой (1.2345)"
Отредактирован Clamp
то есть 505/10000 = 0.0505