- Сообщения
- 5,379
- Репутация
- 2,724
Есть в AutoIt один досадный баг/особенность. Иногда невозможно "по человечески" сравнивать два вещественных числа (см. пример). В свое время, это доставляло мне много неудобств...
Мне лень было выяснять причины и т.д, я просто ввел функцию _Precise(), которая округляет мантиссу вещественного числа до максимального действительного значение. И все проблемы исчезли...
Еще раз убеждаюсь, что без "танцев с бубном" производить математические вычисления в AutoIt не получается.
Добавлено:
Еще один пример.
Код:
$i = 0
While $i <= 1
ConsoleWrite($i & @CR)
$i += 0.01
WEnd
Мне лень было выяснять причины и т.д, я просто ввел функцию _Precise(), которая округляет мантиссу вещественного числа до максимального действительного значение. И все проблемы исчезли...
Код:
$i = 0
While $i <= 1
ConsoleWrite($i & @CR)
; $i += 0.01
$i = _Precise($i + 0.01)
WEnd
Func _Precise($Value)
Return Round($Value, 15)
EndFunc ;==>_Precise
Еще раз убеждаюсь, что без "танцев с бубном" производить математические вычисления в AutoIt не получается.
Добавлено:
Сообщение автоматически объединено:
Еще один пример.
Код:
$A = 0.0004
$B = 0.02
$C = 0.000016
$D = 2
$X = $A * $B ; $X = 0.000008
$Y = $C / $D ; $Y = 0.000008
ConsoleWrite($X & @CR)
ConsoleWrite($Y & @CR)
ConsoleWrite(($X = $Y) & @CR)
ConsoleWrite((_Precise($X) = _Precise($Y)) & @CR)
Func _Precise($Value)
Return Round($Value, 15)
EndFunc ;==>_Precise