2012-07-06 39 views
0

避免非規格化我在做HAXE DSP。我的一些DSP包括遞歸算法,可能會產生反常規(又名次正常)數字。有些平臺在遇到這樣的數字時表現不佳,使得實時處理變得不可能(甚至是離線處理,在某些情況下,更加困難)。顯然,只有產生非常小數字的算法(例如,通過遞歸乘法)纔會生效,但我正在使用這些算法。處理這一問題在HAXE

一個非常常用的方法很簡單:

if r is a denormal 
    r <- 0 

當反向規格太小,有一個給定算法,這是(幾乎)總是在任何效果這工作得很好。

我期待建立多個平臺,並想避免這些麻煩,他們碰巧能夠最大程度之前。所以問題是,我如何快速有效地識別/消除Haxe中的反常規現象?

這可能分解到其他的問題,如:是否有HAXE處理非規格化特定​​語言的方法,或者是它的平臺? (我在文檔中什麼都看不到 - 甚至不是一個isDenormal函數)如果它取決於平臺,是否有標誌或什麼?我如何知道哪些平臺需要特殊處理,哪些不需要?

非常感謝!

回答

1

HAXE不支持這些操作。問題是它所涉及的大多數本地平臺都沒有任何支持。我在這裏主要討論JavaScript,Flash,PHP和Neko。 你當然可以建立自己的庫,並嘗試使用內聯來儘可能優化事物。

+0

好了,但在所有這些情況下,我至少可以通過一個標誌/#告訴定義/等什麼非規格化的平臺特性。實際上,我必須爲每個平臺構建一個帶有#ifdef的庫,並以非常理想的方式進行非正常檢測。 – 2012-07-06 21:17:47

+0

嗯,你總是可以自己定義的限制:(((x <0)-x:X)<1E-15?0:X) – Waneck 2012-07-08 02:23:53

+1

比約恩,你可以自己這樣定義此函數:公共=>靜態內聯函數needDenormFix()返回#if java || php true #else false #end <=。查看每個平臺規格以獲取「良好」平臺的確切列表。不過,我相信只要使用自己的代碼來處理所有平臺的這個問題就不會受到傷害。 – stroncium 2012-07-23 12:03:06