erfinv#

ベクトル要素の要素ごとの逆誤差関数を計算します。

説明#

erfinv(a) 関数は、入力ベクトル a の要素の逆誤差関数の値を計算し、それを出力ベクトル y に書き込みます。

y = erf-1(a)

ここで、erf(x) は次のように定義される誤差関数です:

\[\mathrm{erf} (x) = \frac{2}{\sqrt{\pi}} \int_0^x e^{-t^2}dt\]

有用な関係:

\[\mathrm{erf}^{-1} (x) = \mathrm{erfc}^{-1} (1-x)\]

ここで erfc は相補誤差関数です。

\[\Phi = \frac{1}{2} \mathrm{erf} (\frac{x}{\sqrt{2}})\]

説明:

\[\Phi (x) = - \frac{1}{\sqrt{2\pi}} \int_0^x \exp (- frac{t^2}{2}) dt\]

は累積正規分布関数です。

\[\Phi^{-1} (x) = \sqrt{2} \mathrm{erf}^{-1} (2x-1)\]

ここで \(\phi -1(x)\)erf-1(x) はそれぞれ \(\phi (x)\)erf(x) の逆関数です。

次の図は、erfinv ファミリー関数 (erfinverfcinvcdfnorminv) 間の関係を示しています。

erfinv ファミリー関数の関係

erfinv ファミリー関数の関係#

これらの関数の有用な関係:

\[\mathrm{erfcinv} (x) = \mathrm{erfinv} (1 - x)\]
\[\mathrm{cdfnorminv} (x) = \sqrt{2} \mathrm{erfinv} (2x - 1) = \sqrt{2} \mathrm{erfcinv} (2 - 2x)\]

引数

結果

エラーコード

+0

+0

-0

-0

+1

+\(\infty\)

status::sing

-1

-\(\infty\)

status::sing

|a| > 1

QNAN

status::errdom

+\(\infty\)

QNAN

status::errdom

-\(\infty\)

QNAN

status::errdom

QNAN

QNAN

SNAN

QNAN

API#

構文#

バッファー API

namespace oneapi::mkl::vm { 

sycl::event erfinv(sycl::queue & exec_queue, 
      std::int64_t n, 
      sycl::buffer<T> & a, 
      sycl::buffer<T> & y, 
      oneapi::mkl::vm::mode mode = oneapi::mkl::vm::mode::not_defined, 
      oneapi::mkl::vm::error_handler<T> errhandler = {}); 

}
namespace oneapi::mkl::vm { 

sycl::event erfinv(sycl::queue & exec_queue, 
      sycl::buffer<T> & a, 
      oneapi::mkl::slice sa, 
      sycl::buffer<T> & y, 
      oneapi::mkl::slice sy, 
      oneapi::mkl::vm::mode mode = oneapi::mkl::vm::mode::not_defined, 
      oneapi::mkl::vm::error_handler<T> errhandler = {}); 

}

USM API

namespace oneapi::mkl::vm { 

sycl::event erfinv(sycl::queue & exec_queue, 
      std::int64_t n, 
      T const * a, 
      T * y, 
      std::vector<sycl::event> const & depends = {}, 
      oneapi::mkl::vm::mode mode = oneapi::mkl::vm::mode::not_defined, 
      oneapi::mkl::vm::error_handler<T> errhandler = {}); 

}
namespace oneapi::mkl::vm { 

sycl::event erfinv(sycl::queue & exec_queue, 
      T const * a, 
      oneapi::mkl::slice sa, 
      T * y, 
      oneapi::mkl::slice sy, 
      std::vector<sycl::event> const & depends = {}, 
      oneapi::mkl::vm::mode mode = oneapi::mkl::vm::mode::not_defined, 
      oneapi::mkl::vm::error_handler<T> errhandler = {}); 

}

erfinv は次の精度とデバイスをサポートしています。

T

デバイスサポート

sycl::half

GPU

_Float16

CPU

float

CPU および GPU

double

CPU および GPU

入力パラメーター#

バッファー API

exec_queue

ルーチンが実行されるキュー。

n

計算する要素の数を指定します。

a

入力ベクトルを含むバッファー。

sa

a のスライスセレクター。oneMKL スライスタイプの説明については、データタイプを参照してください。

sy

y のスライスセレクター。oneMKL スライスタイプの説明については、データタイプを参照してください。

mode

この関数呼び出しのグローバル VM モード設定をオーバーライドします。指定可能な値とその説明については、set_mode 関数を参照してください。これはオプションのパラメーターです。デフォルト値は mode::not_defined です。

errhandler

この関数呼び出しのローカルエラー処理モードを設定します。引数と説明については、create_error_handler 関数を参照してください。これはオプションのパラメーターです。ローカル・エラー・ハンドラーはデフォルトで無効になっています。

USM API

exec_queue

ルーチンが実行されるキュー。

n

計算する要素の数を指定します。

a

入力ベクトルへのポインター。

sa

a のスライスセレクター。oneMKL スライスタイプの説明については、データタイプを参照してください。

sy

y のスライスセレクター。oneMKL スライスタイプの説明については、データタイプを参照してください。

depends

依存イベントのベクトル (入力データの準備ができるまで待機)。これはオプションのパラメーターです。デフォルトは空のベクトルです。

mode

この関数呼び出しのグローバル VM モード設定をオーバーライドします。指定可能な値とその説明については、set_mode 関数を参照してください。これはオプションのパラメーターです。デフォルト値は mode::not_defined です。

errhandler

この関数呼び出しのローカルエラー処理モードを設定します。引数と説明については、create_error_handler 関数を参照してください。これはオプションのパラメーターです。ローカル・エラー・ハンドラーはデフォルトで無効になっています。

出力パラメーター#

バッファー API

y

出力ベクトルを含むバッファー。

戻り値 (event)

計算終了イベント。

USM API

y

出力ベクトルへのポインター。

戻り値 (event)

計算終了イベント。

#

erfinv の使用例は、oneMKL インストール・ディレクトリーの以下の場所にあります。

share/doc/mkl/examples/sycl/vml/source/verfinv.cpp