![]()
Extremator
![]() ![]() offline
Опыт:
39,565Активность: |
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) Что это может быть за проблема такая с сравнением чисел??
(скрин триггеров + скрин сообщения в игре (парами) ) |
![]() |
#1
+2/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|
![]()
Melissa
Я всегда хочу как лучше!
![]() ![]() offline
Опыт:
31,696Активность: |
Чертовщина, й. Делай сравнение г>=0.2-(1/1000) |
![]() |
#2
+0/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|
![]()
ScorpioT1000
Работаем
![]() ![]() offline
Опыт: отключен
|
НИКОГДА не используйте оператор "==" для чисел с плавающей точкой, если не знаете, как он работает
правильное сравнение:
ScorpioT1000 добавил:
На будущее - можете взять мою мат. библиотеку: |
![]() |
#3
+4/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|
![]()
DioD
![]() ![]() offline
Опыт:
45,134Активность: |
не нужны никакие библиотеки, достаточно понимать как работают числа с плавающей точкой чтобы сравнивать их грамотно.
вообще сравнивать объекты не правильно, в старших языках такая шляпа вообще не прокатывает. |
![]() |
#4
+0/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|
![]()
ScorpioT1000
Работаем
![]() ![]() offline
Опыт: отключен
|
вполне прокатывает, если реализовать оператор |
![]() |
#5
+0/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|
![]()
Extremator
![]() ![]() offline
Опыт:
39,565Активность: |
В общем мне хватило добавить .01 к обычному времени
и задаю я теперь не set time = 10.00, для триггерного баффа на 10 сек, а set time = 10.01, и он срабатывает каждые 0.1 сек (по -0.10) ровно 100 раз... не знаю что там с округлениями, но по мне - так проще...
а вообще - наверно проще было бы тоже самое поделать только с целыми числами... х) (ниже скрин, на котором видно почему 1.00 - 0.10 меньше чем 0.9 ) |
![]() |
#6
+0/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|
![]()
ScorpioT1000
Работаем
![]() ![]() offline
Опыт: отключен
|
Гениально. |
![]() |
#7
+0/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|
![]()
adic3x
![]() offline
Опыт:
108,439Активность: |
Используйте их (целочисленные) в качестве счетчиков и имейте счастье. |
![]() |
#8
+0/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|
![]()
DioD
![]() ![]() offline
Опыт:
45,134Активность: |
позволю себе напомнить, что никто не запрещает хранить дробную часть как целое отдельное число, очень жаль что вы на это сами не способны. кстати драйверы и код ядра числами с плавающей точкой вообще не занимается. |
![]() |
#9
+0/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|
![]()
ScorpioT1000
Работаем
![]() ![]() offline
Опыт: отключен
|
ага и вообще на каждый регистр по переменной) а лучше хранить всю память в одной строке! |
![]() |
#10
+0/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|
![]()
Extremator
![]() ![]() offline
Опыт:
39,565Активность: |
DioD:
способны, но... почему тогда не в три переменных?))) |
![]() |
#11
+0/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|
![]()
adic3x
![]() offline
Опыт:
108,439Активность: |
Никто не мешает и использовать целочисленную как дробную, но с не плавающей, а фиксированной частью. |
![]() |
#12
+0/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|
![]()
ScorpioT1000
Работаем
![]() ![]() offline
Опыт: отключен
|
Ещё как мешает. Флоат поддерживается аппаратно. |
![]() |
#13
+0/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|
![]()
adic3x
![]() offline
Опыт:
108,439Активность: |
int тоже поддерживается аппаратно. |
![]() |
#14
+0/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|
![]()
DioD
![]() ![]() offline
Опыт:
45,134Активность: |
почитали бы про это, флоуты работают в специальном режиме процессора, который надо включать-выключать что есть бред, особенно когда можно просто хранить целые числа в нужной точности. |
![]() |
#15
+0/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|
![]()
ScorpioT1000
Работаем
![]() ![]() offline
Опыт: отключен
|
ADOLF, имеется ввиду переопределения всех операций с вашими этими fixed, например 0.1 * 0.1 не эквивалентно 10 * 10 fixed только недавно начали внедрять в аппаратную часть для энтертейнмента, но в любом случае, варкрафту это не грозит |
![]() |
#16
+0/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|
![]()
Hellfim
Новичок
![]() ![]() offline
Опыт:
79,707Активность: |
ScorpioT1000, 0.1 * 0.1 вполне себе эквивалентно 10 * 10, просто степень идет в обратную сторону, на самом деле. |
![]() |
#17
+0/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|