2012-07-06 2 views
0

나는 Haxe에서 DSP를하고 있습니다. 내 DSP 중 일부는 비정규 (비정규라는) 숫자를 생성 할 수있는 재귀 알고리즘을 포함합니다. 일부 플랫폼은 이러한 숫자가 발생할 때 제대로 작동하지 않으므로 실시간 처리가 불가능합니다. 심지어 오프라인 처리도 경우에 따라 훨씬 어려워집니다. 분명히, 매우 작은 수를 생성하는 알고리즘 (예 : 재귀 적 곱셈을 통해) 만 영향을 받지만, 이들과 함께 작업하고 있습니다. 문제를 다루는Haxe에서 비정상적인 것을 피하십시오.

한 매우 일반적인 절차는 간단이 :

if r is a denormal 
    r <- 0 

비정규 항상 (거의)이며, 지정된 알고리즘에 어떤 영향을 미칠 너무 작은 경우는 잘 작동합니다.

나는 많은 플랫폼을 구축하고자하며 가능한 한 최대로 이러한 문제가 발생하기 전에 이러한 두통을 피하려고합니다. 따라서 문제는 Haxe의 비정규 권을 어떻게 신속하고 효율적으로 식별/제거 할 수 있습니까?

다음과 같은 다른 질문으로 분류 될 수 있습니다. Haxe는 비정품 처리 언어를 사용하는 방법을 가지고 있습니까? 아니면 플랫폼에 달려 있습니까? (나는 문서에서 아무것도 보지 않는다 - isDenormal 함수조차도 아니다.) 플랫폼에 달려 있다면 깃발 같은 것이 있는가? 어떤 플랫폼이 특별한 처리가 필요한지 알 수 있습니까?

감사합니다.

답변

1

Haxe는 이러한 작업을 지원하지 않습니다. 문제는 그것이 다루는 네이티브 플랫폼의 대부분이 그것을 지원하지 않는다는 것입니다. 나는 JavaScript, Flash, PHP, Neko를 중심으로 이야기하고있다. 자신 만의 라이브러리를 구축하고 가능한 경우 인라인을 사용하여 작업을 최적화 할 수 있습니다.

+0

그래,하지만 모든 경우에 최소한/denomals에 대한 플랫폼 특성이 무엇인지/define/etc 플래그를 통해 알릴 수있었습니다. 그것이 그렇듯이, 나는 각 플랫폼에 대해 #ifdef로 lib를 만들어야하고, 비정상 탐지를 최적의 방식으로 멀리해야한다. –

+0

글쎄, 당신은 항상 자신을 정의 할 수 있습니다 : (((x <0)? -x : x) <1e-15? 0 : x) – Waneck

+1

비욘, 당신은 스스로 이렇게 정의 할 수 있습니다 : public => static 인라인 함수 needDenormFix() return #if java || PHP true #else false #end <=. "좋은"플랫폼의 정확한 목록을 보려면 각 플랫폼 사양을 살펴보십시오. 그러나 모든 플랫폼에서이 문제를 해결하기 위해 자신의 코드를 사용하는 것이 좋다고 생각합니다. – stroncium

관련 문제