Я занимаюсь DSP в Хаксе. Некоторые из моих DSP включают в себя рекурсивные алгоритмы, которые могут генерировать денормальные (ака субнормальные) числа. Некоторые платформы плохо работают при столкновении с такими цифрами, что делает невозможным обработку в реальном времени (и даже автономную обработку, в некоторых случаях, значительно сложнее). Очевидно, что выполняются только алгоритмы, которые производят очень маленькие числа (например, посредством рекурсивного умножения), но я работаю с ними.Избегайте денормалов в Haxe
Одна очень распространенная процедура для решения этой проблемы просто так:
if r is a denormal
r <- 0
Это прекрасно работает, когда денормализованные числа слишком малы, чтобы иметь никакого влияния на данный алгоритм, который (в значительной степени) всегда.
Я ищу для создания ряда платформ и хотел бы избежать этих головных болей, прежде чем они произойдут в максимально возможной степени. Итак, вопрос в том, как быстро и эффективно определить/устранить денормалы в Хаксе?
Это может нарушить другие вопросы, такие как: имеет ли Haxe специфический для языка метод обработки денормалов или это зависит от платформы? (Я ничего не вижу в документах - даже функция isDenormal). Если это зависит от платформы, есть ли флаг или что-то еще? Как я узнаю, какие платформы нуждаются в специальной обработке, а какие нет?
Большое спасибо!
Хорошо, но во всех этих случаях я мог бы, по крайней мере, сказать через флаг/# define/etc, что характеристики платформы для денормалов. Как бы то ни было, я должен создать lib с #ifdef для каждой платформы и сделать обнаружение денормации вдали от оптимальных способов. –
Ну, вы всегда можете определить ограничение самостоятельно: (((x <0)? -x: x) <1e-15? 0: x) – Waneck
Bjorn, вы можете определить эту функцию самостоятельно: public => static inline function needDenormFix() return #if java || php true #else false #end <=. Просмотрите спецификации каждой платформы для точного списка «хороших» платформ. Тем не менее, я считаю, что просто использовать свой собственный код для обработки этого для всей платформы не повредит. – stroncium