【问题标题】:Avoiding Denormals in Haxe在 Haxe 中避免异常
【发布时间】:2012-07-07 02:47:05
【问题描述】:

我在 Haxe 做 DSP。我的一些 DSP 包含递归算法,可能会生成非正规(也称为次正规)数。某些平台在遇到此类数字时表现不佳,无法进行实时处理(在某些情况下,甚至离线处理变得更加困难)。显然,只有产生非常小的数字的算法(例如,通过递归乘法)才会受到影响,但我正在使用这些算法。

处理该问题的一个非常常见的过程就是这样:

if r is a denormal
   r <- 0

当非正规数太小而无法对给定算法产生任何影响时,这很有效,这(几乎)总是如此。

我正在寻找为多个平台构建的产品,并希望尽可能避免这些令人头疼的问题。所以问题是,如何快速有效地识别/消除 Haxe 中的非规范化?

这可能会分解为其他问题,例如:Haxe 是否有特定于语言的方法来处理非规范化,还是取决于平台? (我在文档中什么也没看到——甚至没有 isDenormal 函数)如果取决于平台,是否有标志或其他东西?我如何知道哪些平台需要特殊处理,哪些不需要?

非常感谢!

【问题讨论】:

    标签: signal-processing multimedia haxe


    【解决方案1】:

    Haxe 不支持这些操作。问题是它所解决的大多数本机平台也没有对此的任何支持。我在这里主要谈论 JavaScript、Flash、PHP 和 Neko。 您当然可以构建自己的库并尝试使用内联尽可能优化事物。

    【讨论】:

    • 好的,但在所有这些情况下,我至少可以通过标志/#define/etc 告诉我非正规的平台特征是什么。事实上,我必须为每个平台构建一个带有#ifdef 的库,并以远非最佳方式进行非规范检测。
    • 好吧,你总是可以自己定义一个限制:(( (x
    • Bjorn,你可以自己定义这个函数: public => static inline function needDenormFix() return #if java||php true #else false #end
    • 哦,所有内容都将被内联,因此每个平台只会编译 if(needDenormFix()){}else{} 的一个分支。
    猜你喜欢
    • 2010-09-29
    • 1970-01-01
    • 2011-05-30
    • 2017-02-10
    • 1970-01-01
    • 1970-01-01
    • 2016-09-15
    • 2016-08-13
    • 2012-01-31
    相关资源
    最近更新 更多