Extremator
|
R = 0.2 но R < 0.2
Делал триггер, и... в какой то момент понял что недосчитываюсь одного (последнего) действия
Начал проверять... упрощать... искать ошибку Дошло до того что в первом триггере осталось только а во втором по событию срабатывания таймера
И так триггер должен сработать 5 раз
1-й раз 1.00 - 0.20 = 0.80 а это меньше чем 0.20 ? нет... 2-й раз 0.80 - 0.20 = 0.60 а это меньше чем 0.20 ? нет... 3-й раз 0.60 - 0.20 = 0.40 а это меньше чем 0.20 ? нет... 4-й раз 0.40 - 0.20 = 0.20 а это меньше чем 0.20 ? нет... ( 0.2 не меньше 0.2 так же как и 1 не меньше 1 ) и 5-й раз 0.20 - 0.20 = 0.00 а это меньше чем 0.20 ? ДА Но у меня триггер почему то срабатывает на 4-м такте
т.е. 0.2 меньше 0.2, и таймер останавливает сработав только 4-х раз Я пробовал то же самое с целыми числами (от 5 и по -1) - там было всё нормально
Я проверил то же самое с реальными, но отнимал по 0.5 - там тоже было норм. А ещё я пробывал просто установить R на 0.03 и тут же задать условие что R меньше 0.03 , но условие срабатывало нормально... (R не было меньше 0.03) Что это может быть за проблема такая с сравнением чисел??
(скрин триггеров + скрин сообщения в игре (парами) ) |
30.01.2014, 13:12 | #1
+2/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|
Melissa
Я всегда хочу как лучше!
offline
Опыт:
30,496Активность: |
Чертовщина, й. Делай сравнение г>=0.2-(1/1000) |
30.01.2014, 14:55 | #2
+0/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|
ScorpioT1000
Работаем
offline
Опыт: отключен
|
НИКОГДА не используйте оператор "==" для чисел с плавающей точкой, если не знаете, как он работает
правильное сравнение:
ScorpioT1000 добавил:
На будущее - можете взять мою мат. библиотеку: |
30.01.2014, 22:32 | #3
+4/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|
DioD
offline
Опыт:
45,184Активность: |
не нужны никакие библиотеки, достаточно понимать как работают числа с плавающей точкой чтобы сравнивать их грамотно.
вообще сравнивать объекты не правильно, в старших языках такая шляпа вообще не прокатывает. |
31.01.2014, 04:54 | #4
+0/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|
ScorpioT1000
Работаем
offline
Опыт: отключен
|
вполне прокатывает, если реализовать оператор |
31.01.2014, 05:00 | #5
+0/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|
Extremator
|
В общем мне хватило добавить .01 к обычному времени
и задаю я теперь не set time = 10.00, для триггерного баффа на 10 сек, а set time = 10.01, и он срабатывает каждые 0.1 сек (по -0.10) ровно 100 раз... не знаю что там с округлениями, но по мне - так проще...
а вообще - наверно проще было бы тоже самое поделать только с целыми числами... х) (ниже скрин, на котором видно почему 1.00 - 0.10 меньше чем 0.9 ) |
31.01.2014, 09:42 | #6
+0/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|
ScorpioT1000
Работаем
offline
Опыт: отключен
|
Гениально. |
31.01.2014, 10:44 | #7
+0/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|
adic3x
offline
Опыт:
108,439Активность: |
Используйте их (целочисленные) в качестве счетчиков и имейте счастье. |
31.01.2014, 13:05 | #8
+0/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|
DioD
offline
Опыт:
45,184Активность: |
позволю себе напомнить, что никто не запрещает хранить дробную часть как целое отдельное число, очень жаль что вы на это сами не способны. кстати драйверы и код ядра числами с плавающей точкой вообще не занимается. |
31.01.2014, 17:13 | #9
+0/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|
ScorpioT1000
Работаем
offline
Опыт: отключен
|
ага и вообще на каждый регистр по переменной) а лучше хранить всю память в одной строке! |
31.01.2014, 17:47 | #10
+0/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|
Extremator
|
DioD:
способны, но... почему тогда не в три переменных?))) |
31.01.2014, 20:29 | #11
+0/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|
adic3x
offline
Опыт:
108,439Активность: |
Никто не мешает и использовать целочисленную как дробную, но с не плавающей, а фиксированной частью. |
01.02.2014, 03:02 | #12
+0/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|
ScorpioT1000
Работаем
offline
Опыт: отключен
|
Ещё как мешает. Флоат поддерживается аппаратно. |
01.02.2014, 17:17 | #13
+0/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|
adic3x
offline
Опыт:
108,439Активность: |
int тоже поддерживается аппаратно. |
01.02.2014, 20:47 | #14
+0/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|
DioD
offline
Опыт:
45,184Активность: |
почитали бы про это, флоуты работают в специальном режиме процессора, который надо включать-выключать что есть бред, особенно когда можно просто хранить целые числа в нужной точности. |
02.02.2014, 12:26 | #15
+0/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|
ScorpioT1000
Работаем
offline
Опыт: отключен
|
ADOLF, имеется ввиду переопределения всех операций с вашими этими fixed, например 0.1 * 0.1 не эквивалентно 10 * 10 fixed только недавно начали внедрять в аппаратную часть для энтертейнмента, но в любом случае, варкрафту это не грозит |
02.02.2014, 14:30 | #16
+0/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|
Hellfim
Новичок
offline
Опыт:
79,880Активность: |
ScorpioT1000, 0.1 * 0.1 вполне себе эквивалентно 10 * 10, просто степень идет в обратную сторону, на самом деле. |
02.02.2014, 17:12 | #17
+0/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|