2017-03-16 13 views
0

intを使用して1/xを計算しようとしていますが、xがdoubleであることを前提としています。私は次のように計算を達成しようとしています:C++でイントリンシック関数を使用して逆数を計算する

__inline__ double __attribute__((const)) rcp_d (double x) { 
    double res; 
    _mm_store_pd(&res, 
       _mm_rcp_ps(_mm_load_pd(&x)) 
     ); 

    return res; 
} 

をしかし、私はエラーを取得:

error: cannot convert ‘__m128d {aka __vector(2) double}’ to ‘__m128 {aka __vector(4) float}’ for argument ‘1’ to ‘__m128 _mm_rcp_ps(__m128)’ 
        _mm_rcp_ps(_mm_load_pd(&x)) 

正しく計算を行うために、任意の提案を?

答えて

0

_mm_rcp_psは、double型ではなく__mm128(4xfloat)データ型で動作します。 _mm_rcp14_pdを代わりに使用する必要がありますが、この命令はAVX512拡張機能をサポートする新しいCPUでのみ使用できます。

関連する問題