Math ライブラリ
概要
VCSSL Math ライブラリ は、数学関数を提供するための標準ライブラリです。
具体的には、指数関数、対数関数、平方根と累乗根、階乗、三角関数、逆三角関数、双曲線関数、逆双曲線関数、絶対値と最大最小値関数などが挙げられます。
このライブラリでは、64bit-float (いわゆるdouble) 精度と多倍長精度の数学関数が提供されます。前者は float 型、後者は varfloat 型として扱います。
VCSSLにおける float 型は double 型と区別されず、共に処理系によって定義される精度を持ち、現在の公式実装では IEEE754 の 64-bit float となっています。
varfloat 型については、現在の公式実装では統一規格では無く、10進 任意精度の独自仕様が採用されてます。丸めは10進における切り捨てによって処理されます。
varfloat型の詳細仕様は処理系依存であり、将来的には何らかの統一規格に変更される可能性があります。
float (double) 実装の数学関数については、処理系側の組み込みの機能が使用され、実行時に特殊な演算命令の一種に展開されて扱われます。
Math ライブラリが提供する float 実装の数学関数の多くは、そういった特殊な演算命令をラッピングした関数マクロです。
そのため、関数コールのオーバーヘッドが無く、概ね良好なパフォーマンスを発揮します。
それに対して varfloat (多倍長) 実装の数学関数については、VCSSL のコードとして実装されています。
具体的には、マクローリン展開やテイラー展開、ニュートン法、ガウス=ルジャンドル法などによって、値を求める計算アルゴリズムが、全て VCSSL で varfloat 型を用いて実装されています。
このため、処理速度は一般に低速の部類に入ります。これは、スクリプト言語による実装である事や、そもそも varfloat 型の演算速度が低速である事などに起因します。
具体的な例として、sin(1) の値を有効桁数 1000 桁で計算するコードは以下のようになります。この計算では sin 関数に 1 秒弱の処理時間を要します。
varfloat value = sin( 1.0vf ); // sin 関数を計算
print( value ); // 出力
varfloat (多倍長) 実装の数学関数では、多くが収束アルゴリズムに依存しているため、末尾の、ある程度の桁数に誤差蓄積が生じる場合があります。
この事を見越して、数学関数の内部では、数割程度(関数によって異なります)大きい桁数で計算し、値を返す時点で余剰桁を切り捨てるようになっています。
ただし、これはあくまで補助的なものであり、あらゆる有効桁数と引数に対して、常に誤差蓄積の桁が排除される事を保証するものではありません。
関数にもよりますが、誤差蓄積の検証は、一般に数十桁程度の有効桁数による用途と、常用的な範囲の引数を想定して行われています。
数千から数万桁の用途や、特異点近傍の引数については、一般に誤差蓄積が大きくなるため、切り捨てる余剰桁に収まらず、関数の戻り値の末尾にも現れる場合があります。
従って、そうした用途では、呼び出し側でも誤差蓄積を考慮した大きめの有効桁数で使用し、余剰桁を切り捨てるなどの措置を行ってください。
目次
- const float PI
- float精度における、円周率の値です。多倍長精度の varfloat 値を得るには pi() を使用してください。
- const float E
- float精度における、ネイピア数(自然対数の底)の値です。多倍長精度の varfloat 値を得るには exp( 1.0vf ) で計算してください。
- macro nan( float arg )
- float値が NaN かどうか判定します。
- macro inf( float arg )
- float値が Inf かどうか判定します。
- macro and( int number1, int number2 )
- int値に対して、ビットごとのAND(論理積)演算を計算します。
- macro or( int number1, int number2 )
- int値に対して、ビットごとのOR(論理和)演算を計算します。
- macro xor( int number1, int number2 )
- int値に対して、ビットごとのXOR(排他的論理和)演算を計算します。
- macro random()
- 0.0以上1.0未満の値を返します。なお、VCSSL3.0.20以前のドキュメントにおいて「0.0 から 1.0 までの乱数値を返します。」と記載されていましたが、この表現は曖昧であり、実際には1.0に完全に一致する値が返される事はありません。
- macro rand()
- randomと同様です。現在はrandomの使用が推奨されます。この関数の名称は、整数型の乱数と混同を招くため、現在の使用は推奨されません。将来的に、この関数の型の変更が検討される可能性があります。
- varfloat pi()
- 円周率の値を計算します。内部では、元の桁数の1.1倍の桁数で、ガウス=ルジャンドル法によって計算されます。高精度な円周率の値は、周期性がある関数の計算や、周期境界をもつシミュレーション(回転系や写像系など)において、引数や座標の円周率による剰余を求めるために必要となります。実際に Math ライブラリでも、varfloat型の三角関数を求める計算などで使用されています。
- macro exp( float arg )
- ネイピア数を低とする指数関数を計算します。
- varfloat exp( varfloat arg )
- ネイピア数を低とする指数関数を計算します。内部では、元の桁数の 1.34 倍の桁数で、マクローリン展開によって計算されます。ただし 10 桁以下では、元の桁数 + 4桁 で計算されます。この余剰桁数は、将来的に( 恐らくより高精度な方向に )変更される可能性があります。
- macro pow( float arg1, float arg2 )
- 指数関数を計算します。
- varfloat pow( varfloat arg1, varint arg2 )
- 指数が整数の指数関数を計算します。内部では、「 元の桁数 + 指数 ( arg2 ) のオーダーの絶対値 」の2.1倍の桁数で、乗算の繰り返しによって計算されます。ただし 10 桁以下では、元の桁数 + 4桁 で計算されます。この余剰桁数は、将来的に( 恐らくより高精度な方向に )変更される可能性があります。
- varfloat pow( varfloat arg1, varfloat arg2 )
- 指数が浮動小数点数(実数)の指数関数を計算します。内部では、「 元の桁数 + 指数 ( arg2 ) のオーダーの絶対値 」の1.2倍の桁数で、 + マクローリン展開もしくは指数関数と対数関数の組み合わせによって計算されます。ただし 10 桁以下では、元の桁数 + 4桁 で計算されます。この余剰桁数は、将来的に( 恐らくより高精度な方向に )変更される可能性があります。
- varfloat pow( varint arg1, varfloat arg2 )
- 指数関数を計算します。内部では、arg1 を varfloat 型にキャストした上で、 pow( varfloat, varfloat ) が使用されます。
- macro ln( float arg )
- 自然対数を計算します。log と同じです。
- macro ln( varfloat arg )
- 自然対数を計算します。log と同じです。内部ではそのまま log(varfloat) が使用されています。
- macro log( float arg )
- 自然対数を計算します。ln と同じです。
- varfloat log( varfloat arg )
- 自然対数を計算します。ln と同じです。内部では、元の桁数の1.34倍の桁数で、「 1以上の引数ではニュートン法、1以下の引数ではテイラー展開 」によって計算されます。ただし 10 桁以下では、元の桁数 + 4桁 で計算されます。この余剰桁数は、将来的に( 恐らくより高精度な方向に )変更される可能性があります。
- macro log10( float arg )
- 常用対数を計算します。
- varfloat log10( varfloat arg )
- 常用対数を計算します。内部では、元の桁数の2.2倍の桁数で、「 log10(x) = ln(x) / ln(10) 」によって計算されます。ただし 10 桁以下では、元の桁数 + 4桁 で計算されます。この余剰桁数は、将来的に( 恐らくより高精度な方向に )変更される可能性があります。
- macro sqrt( float arg )
- 平方根を計算します。
- varfloat sqrt( varfloat arg )
- 平方根を計算します。内部では、元の桁数の1.34倍の桁数で、ニュートン法によって計算されます。ただし 10 桁以下では、元の桁数 + 4桁 で計算されます。この余剰桁数は、将来的に( 恐らくより高精度な方向に )変更される可能性があります。
- macro root( float arg, int rootPower )
- N乗根を計算します。
- varfloat root( varfloat arg, varint p )
- N乗根を計算します。内部では、元の桁数の1.34倍の桁数で、ニュートン法によって計算されます。ただし 10 桁以下では、元の桁数 + 4桁 で計算されます。この余剰桁数は、将来的に( 恐らくより高精度な方向に )変更される可能性があります。
- varfloat root( varfloat arg, varfloat vfp )
- N乗根を計算します。内部では、元の桁数の1.34倍の桁数で、ニュートン法によって計算されます。ただし 10 桁以下では、元の桁数 + 4桁 で計算されます。この余剰桁数は、将来的に( 恐らくより高精度な方向に )変更される可能性があります。なお、この関数の第二引数は、常に整数であると見なされます。この関数は、電卓ソフトなどで数値リテラルが浮動小数点数と見なされるモードにおける、利便性確保のためだけにサポートされています。通常の利用シーンでは使用する利点は特に無いため、root( varfloat, varint ) を使用してください。
- macro abs( float arg )
- 絶対値を計算します。
- macro abs( int arg )
- 絶対値を計算します。
- varfloat abs( varfloat arg )
- 絶対値を計算します。
- varint abs( varint arg )
- 絶対値を計算します。
- macro max( float arg1, float arg2 )
- 2つの引数の内、大きい方を返します。
- macro max( int arg1, int arg2 )
- 2つの引数の内、大きい方を返します。
- varfloat max( varfloat arg1, varfloat arg2 )
- 2つの引数の内、大きい方を返します。
- varint max( varint arg1, varint arg2 )
- 2つの引数の内、大きい方を返します。
- macro min( float arg1, float arg2 )
- 2つの引数の内、小さい方を返します。
- macro min( int arg1, int arg2 )
- 2つの引数の内、小さい方を返します。
- varfloat min( varfloat arg1, varfloat arg2 )
- 2つの引数の内、小さい方を返します。
- varint min( varint arg1, varint arg2 )
- 2つの引数の内、小さい方を返します。
- float fac( float arg )
- 階乗を計算します。この関数は引数・戻り値共に float ですが、内部で近い int に丸めて計算されます。変換に伴い、誤差が精度に影響する可能性があります。厳密性を要求する場合は int 引数のものを使用してください。
- macro fac( int arg )
- 階乗を計算します。
- varint fac( varint arg )
- 階乗を計算します。
- varfloat fac( varfloat arg )
- 階乗を計算します。
- macro sin( float arg )
- サイン(正弦)関数を計算します。
- varfloat sin( varfloat arg )
- サイン(正弦)関数を計算します。内部では、「 元の桁数の1.34倍 + 引数のオーダーの10倍 」の桁数で、マクローリン展開によって計算されます。ただし 10 桁以下では、「 元の桁数 + 4桁 + 引数のオーダーの10倍 」の桁数で計算されます。この余剰桁数は、将来的に( 恐らくより高精度な方向に )変更される可能性があります。0 ~ π/2 の範囲以外の引数に対しては、三角関数の対称性と周期性を利用し、内部では 0 ~ π の範囲の値を使用して計算されます。
- macro cos( float arg )
- コサイン(余弦)関数を計算します。
- varfloat cos( varfloat arg )
- コサイン(余弦)関数を計算します。内部では、「 元の桁数の1.34倍 + 引数のオーダーの10倍 」の桁数で、マクローリン展開によって計算されます。ただし 10 桁以下では、「 元の桁数 + 4桁 + 引数のオーダーの10倍 」の桁数で計算されます。この余剰桁数は、将来的に( 恐らくより高精度な方向に )変更される可能性があります。0 ~ π/2 の範囲以外の引数に対しては、三角関数の対称性と周期性を利用し、内部では 0 ~ π の範囲の値を使用して計算されます。
- macro tan( float arg )
- タンジェント(正接)関数を計算します。
- varfloat tan( varfloat arg )
- タンジェント(正接)関数を計算します。内部では、元の桁数の2.1倍の桁数で、「 tan(x) = sin(x) / cos(x) 」によって計算されます。ただし 10 桁以下では、「 元の桁数 + 4桁 」の桁数で計算されます。この余剰桁数は、将来的に( 恐らくより高精度な方向に )変更される可能性があります。
- macro asin( float arg )
- アークサイン関数(サインの逆関数)を計算します。
- varfloat asin( varfloat arg )
- アークサイン関数(サインの逆関数)を計算します。内部では、元の桁数の1.34倍の桁数で、「 絶対値が0.7以下の引数についてはマクローリン展開、それより外側はニュートン法 」によって計算されます。ただし 10 桁以下では、「 元の桁数 + 4桁 」の桁数で計算されます。この余剰桁数は、将来的に( 恐らくより高精度な方向に )変更される可能性があります。
- macro acos( float arg )
- アークコサイン関数(コサインの逆関数)を計算します。
- varfloat acos( varfloat arg )
- アークコサイン関数(コサインの逆関数)を計算します。内部では、元の桁数の1.34倍の桁数で、「 acos(x) = π/2 - asin(x) 」によって計算されます。ただし 10 桁以下では、「 元の桁数 + 4桁 」の桁数で計算されます。この余剰桁数は、将来的に( 恐らくより高精度な方向に )変更される可能性があります。
- macro atan( float arg )
- アークタンジェント関数(タンジェントの逆関数)を計算します。
- varfloat atan( varfloat arg )
- アークタンジェント関数(タンジェントの逆関数)を計算します。内部では、元の桁数の1.34倍の桁数で、「 絶対値が0.7以下の引数についてはマクローリン展開、それより外側はニュートン法 」によって計算されます。ただし 10 桁以下では、「 元の桁数 + 4桁 」の桁数で計算されます。この余剰桁数は、将来的に( 恐らくより高精度な方向に )変更される可能性があります。
- macro sinh( float arg )
- ハイパボリックサイン関数を計算します。
- varfloat sinh( varfloat arg )
- ハイパボリックサイン関数を計算します。内部では、元の桁数の2.1倍の桁数で、「 sinh(x) = ( exp(x) - exp(-x) ) / 2 」によって計算されます。ただし 10 桁以下では、「 元の桁数 + 4桁 」の桁数で計算されます。この余剰桁数は、将来的に( 恐らくより高精度な方向に )変更される可能性があります。
- macro cosh( float arg )
- ハイパボリックコサイン関数を計算します。
- varfloat cosh( varfloat arg )
- ハイパボリックコサイン関数を計算します。内部では、元の桁数の2.1倍の桁数で、「 sinh(x) = ( exp(x) + exp(-x) ) / 2 」によって計算されます。ただし 10 桁以下では、「 元の桁数 + 4桁 」の桁数で計算されます。この余剰桁数は、将来的に( 恐らくより高精度な方向に )変更される可能性があります。
- macro tanh( float arg )
- ハイパボリックタンジェント関数を計算します。
- varfloat tanh( varfloat arg )
- ハイパボリックタンジェント関数を計算します。内部では、元の桁数の2.8倍の桁数で、「 sinh(x) = ( exp(x) - exp(-x) ) / ( exp(x) + exp(-x) ) 」によって計算されます。ただし 10 桁以下では、「 元の桁数 + 4桁 」の桁数で計算されます。この余剰桁数は、将来的に( 恐らくより高精度な方向に )変更される可能性があります。
- macro asinh( float arg )
- ハイパボリックサインの逆関数を計算します。
- varfloat asinh( varfloat arg )
- ハイパボリックサインの逆関数を計算します。内部では、元の桁数の2.1倍の桁数で、「 asinh(x) = ln( x + √( x*x + 1 ) ) 」によって計算されます。ただし 10 桁以下では、「 元の桁数 + 4桁 」の桁数で計算されます。この余剰桁数は、将来的に( 恐らくより高精度な方向に )変更される可能性があります。
- macro acosh( float arg )
- ハイパボリックコサインの逆関数を計算します。
- varfloat acosh( varfloat arg )
- ハイパボリックコサインの逆関数を計算します。内部では、元の桁数の2.1倍の桁数で、「 acosh(x) = ln( x + √( x*x - 1 ) ) 」によって計算されます。ただし 10 桁以下では、「 元の桁数 + 4桁 」の桁数で計算されます。この余剰桁数は、将来的に( 恐らくより高精度な方向に )変更される可能性があります。
- macro atanh( float arg )
- ハイパボリックタンジェントの逆関数を計算します。
- varfloat atanh( varfloat arg )
- ハイパボリックタンジェントの逆関数を計算します。内部では、元の桁数の2.1倍の桁数で、「 絶対値が0.9以下の引数については atanh(x) = 1/2 * log(1+x)/log(1-x) 」によって、それより外側はニュートン法によって計算されます。ただし 10 桁以下では、「 元の桁数 + 4桁 」の桁数で計算されます。この余剰桁数は、将来的に( 恐らくより高精度な方向に )変更される可能性があります。関数の対称性を利用し、負の引数については、正の引数における値を利用して計算されます。古いバージョンでは、-0.7 以下(負の無限大側)の引数について値を求められません。計算が終わらないか、0 が返されます。この問題は VCSSL 3.3.2 において修正されました。
- macro deg( float rad )
- 角度の単位変換です。弧度法(ラジアン)の角度を、度数法の角度に変換します。
- varfloat deg(varfloat rad)
- 角度の単位変換です。弧度法(ラジアン)の角度を、度数法の角度に変換します。内部では、元の桁数の1.34倍の桁数で、「 ラジアン数 = 度数 * π / 180 」によって計算されます。
- macro rad( float deg )
- 角度の単位変換です。度数法の角度を、弧度法(ラジアン)の角度に変換します。
- varfloat rad(varfloat deg)
- 角度の単位変換です。度数法の角度を、弧度法(ラジアン)の角度に変換します。内部では、元の桁数の1.34倍の桁数で、「 度数 = ラジアン数 * 180 / π 」によって計算されます。
構造体
- なし -
変数
| 変数名 | PI |
| 宣言形式 | const float PI |
| 説明 | float精度における、円周率の値です。多倍長精度の varfloat 値を得るには pi() を使用してください。 |
| 変数名 | E |
| 宣言形式 | const float E |
| 説明 | float精度における、ネイピア数(自然対数の底)の値です。多倍長精度の varfloat 値を得るには exp( 1.0vf ) で計算してください。 |
関数
| 関数名 | nan |
| 宣言形式 | macro nan( float arg ) |
| 説明 | float値が NaN かどうか判定します。 |
| 引数 | (float型) arg : 判定対象の値。 |
| 戻り値 | (bool型) NaN であれば true 、そうでなければ false 。 |
| 使用例 |
float x = 0.0/0.0; bool isNaN = nan(x); print("isNaN=" + isNaN); |
| 関数名 | inf |
| 宣言形式 | macro inf( float arg ) |
| 説明 | float値が Inf かどうか判定します。 |
| 引数 | (float型) arg : 判定対象の値。 |
| 戻り値 | (bool型) Inf であれば true 、そうでなければ false 。 |
| 使用例 |
float x = 1.0/0.0; bool isInf = inf(x); print("isInf=" + isInf); |
| 関数名 | and |
| 宣言形式 | macro and( int number1, int number2 ) |
| 説明 | int値に対して、ビットごとのAND(論理積)演算を計算します。 |
| 引数 |
(int型) number1 : 演算対象の値 (int型) number2 : 演算対象の値 (int) : 計算結果の値 |
| 使用例 |
int a = 0b01010101; int b = 0b11110000; int c = and(a, b); print( bin(c) ); // 0b1010000 |
| 関数名 | or |
| 宣言形式 | macro or( int number1, int number2 ) |
| 説明 | int値に対して、ビットごとのOR(論理和)演算を計算します。 |
| 引数 |
(int型) number1 : 演算対象の値 (int型) number2 : 演算対象の値 (int) : 計算結果の値 |
| 使用例 |
int a = 0b01010101; int b = 0b11110000; int c = or(a, b); print( bin(c) ); // 0b11110101 |
| 関数名 | xor |
| 宣言形式 | macro xor( int number1, int number2 ) |
| 説明 | int値に対して、ビットごとのXOR(排他的論理和)演算を計算します。 |
| 引数 |
(int型) number1 : 演算対象の値 (int型) number2 : 演算対象の値 (int) : 計算結果の値 |
| 使用例 |
int a = 0b01010101; int b = 0b11110000; int c = xor(a, b); print( bin(c) ); // 0b10100101 |
| 関数名 | random |
| 宣言形式 | macro random() |
| 説明 | 0.0以上1.0未満の値を返します。なお、VCSSL3.0.20以前のドキュメントにおいて「0.0 から 1.0 までの乱数値を返します。」と記載されていましたが、この表現は曖昧であり、実際には1.0に完全に一致する値が返される事はありません。 |
| 戻り値 | (float型) 乱数値 |
| 使用例 |
float v = random(); print(v); // 0.367283... (random) |
| 関数名 | rand |
| 宣言形式 | macro rand() |
| 説明 | randomと同様です。現在はrandomの使用が推奨されます。この関数の名称は、整数型の乱数と混同を招くため、現在の使用は推奨されません。将来的に、この関数の型の変更が検討される可能性があります。 |
| 戻り値 | (float型) 乱数値 |
| 関数名 | pi |
| 宣言形式 | varfloat pi() |
| 説明 |
円周率の値を計算します。 内部では、元の桁数の1.1倍の桁数で、ガウス=ルジャンドル法によって計算されます。 高精度な円周率の値は、周期性がある関数の計算や、周期境界をもつシミュレーション(回転系や写像系など)において、引数や座標の円周率による剰余を求めるために必要となります。実際に Math ライブラリでも、varfloat型の三角関数を求める計算などで使用されています。 |
| 戻り値 | (varfloat型) 円周率の値。 |
| 使用例 |
digit(100); varfloat pi = pi(); print(pi); // 3.14... |
| 関数名 | exp |
| 宣言形式 | macro exp( float arg ) |
| 説明 | ネイピア数を低とする指数関数を計算します。 |
| 引数 | (float型) arg : 計算対象の値。 |
| 戻り値 | (float型) 計算結果の値。 |
| 使用例 |
float e = exp(1.0); print(e); // 2.71... |
| 関数名 | exp |
| 宣言形式 | varfloat exp( varfloat arg ) |
| 説明 |
ネイピア数を低とする指数関数を計算します。 内部では、元の桁数の 1.34 倍の桁数で、マクローリン展開によって計算されます。ただし 10 桁以下では、元の桁数 + 4桁 で計算されます。この余剰桁数は、将来的に( 恐らくより高精度な方向に )変更される可能性があります。 |
| 引数 | (varfloat型) arg : 計算対象の値。 |
| 戻り値 | (varfloat型) 計算結果の値。 |
| 使用例 |
digit(50); varfloat e = exp(1.0vf); print(e); // 2.71... |
| 関数名 | pow |
| 宣言形式 | macro pow( float arg1, float arg2 ) |
| 説明 | 指数関数を計算します。 |
| 引数 |
(float型) arg1 : 低。 (float型) arg2 : 指数。 |
| 戻り値 | (float型) 計算結果の値。 |
| 使用例 |
float f = pow(1.2, 3.4); print(f); // 1.8587... |
| 関数名 | pow |
| 宣言形式 | varfloat pow( varfloat arg1, varint arg2 ) |
| 説明 |
指数が整数の指数関数を計算します。 内部では、「 元の桁数 + 指数 ( arg2 ) のオーダーの絶対値 」の2.1倍の桁数で、乗算の繰り返しによって計算されます。ただし 10 桁以下では、元の桁数 + 4桁 で計算されます。この余剰桁数は、将来的に( 恐らくより高精度な方向に )変更される可能性があります。 |
| 引数 |
(varfloat型) arg1 : 低。 (varint型) arg2 : 指数。 |
| 戻り値 | (varfloat型) 計算結果の値。 |
| 関数名 | pow |
| 宣言形式 | varfloat pow( varfloat arg1, varfloat arg2 ) |
| 説明 |
指数が浮動小数点数(実数)の指数関数を計算します。 内部では、「 元の桁数 + 指数 ( arg2 ) のオーダーの絶対値 」の1.2倍の桁数で、 + マクローリン展開もしくは指数関数と対数関数の組み合わせによって計算されます。ただし 10 桁以下では、元の桁数 + 4桁 で計算されます。この余剰桁数は、将来的に( 恐らくより高精度な方向に )変更される可能性があります。 |
| 引数 |
(varfloat型) arg1 : 低。 (varfloat型) arg2 : 指数。 |
| 戻り値 | (varfloat型) 計算結果の値。 |
| 使用例 |
digit(50); varfloat v = pow(1.2vf, 3.4vf); print(v); // 1.8587... |
| 関数名 | pow |
| 宣言形式 | varfloat pow( varint arg1, varfloat arg2 ) |
| 説明 |
指数関数を計算します。 内部では、arg1 を varfloat 型にキャストした上で、 pow( varfloat, varfloat ) が使用されます。 |
| 引数 |
(varint型) arg1 : 低。 (varfloat型) arg2 : 指数。 |
| 戻り値 | (varfloat型) 計算結果の値。 |
| 関数名 | ln |
| 宣言形式 | macro ln( float arg ) |
| 説明 | 自然対数を計算します。log と同じです。 |
| 引数 | (float型) arg : 計算対象の値。 |
| 戻り値 | (float型) 計算結果の値。 |
| 使用例 |
float f = ln(10.0); print(f); // 2.302585... |
| 関数名 | ln |
| 宣言形式 | macro ln( varfloat arg ) |
| 説明 |
自然対数を計算します。log と同じです。 内部ではそのまま log(varfloat) が使用されています。 |
| 引数 | (varfloat型) arg : 計算対象の値。 |
| 戻り値 | (varfloat型) 計算結果の値。 |
| 使用例 |
digit(50); varfloat v = ln(10.0vf); print(v); // 2.302585... |
| 関数名 | log |
| 宣言形式 | macro log( float arg ) |
| 説明 | 自然対数を計算します。ln と同じです。 |
| 引数 | (float型) arg : 計算対象の値。 |
| 戻り値 | (float型) 計算結果の値。 |
| 使用例 |
float f = log(10.0); print(f); // 2.302585... |
| 関数名 | log |
| 宣言形式 | varfloat log( varfloat arg ) |
| 説明 |
自然対数を計算します。ln と同じです。 内部では、元の桁数の1.34倍の桁数で、「 1以上の引数ではニュートン法、1以下の引数ではテイラー展開 」によって計算されます。ただし 10 桁以下では、元の桁数 + 4桁 で計算されます。この余剰桁数は、将来的に( 恐らくより高精度な方向に )変更される可能性があります。 |
| 引数 | (varfloat型) arg : 計算対象の値。 |
| 戻り値 | (varfloat型) 計算結果の値。 |
| 使用例 |
digit(50); varfloat v = log(10.0vf); print(v); // 2.302585... |
| 関数名 | log10 |
| 宣言形式 | macro log10( float arg ) |
| 説明 | 常用対数を計算します。 |
| 引数 | (float型) arg : 計算対象の値。 |
| 戻り値 | (float型) 計算結果の値。 |
| 使用例 |
float f = log(10.0); print(f); // 1.0 |
| 関数名 | log10 |
| 宣言形式 | varfloat log10( varfloat arg ) |
| 説明 |
常用対数を計算します。 内部では、元の桁数の2.2倍の桁数で、「 log10(x) = ln(x) / ln(10) 」によって計算されます。ただし 10 桁以下では、元の桁数 + 4桁 で計算されます。この余剰桁数は、将来的に( 恐らくより高精度な方向に )変更される可能性があります。 |
| 引数 | (varfloat型) arg : 計算対象の値。 |
| 戻り値 | (varfloat型) 計算結果の値。 |
| 使用例 |
digit(50); varfloat v = log10(10.0vf); print(v); |
| 関数名 | sqrt |
| 宣言形式 | macro sqrt( float arg ) |
| 説明 | 平方根を計算します。 |
| 引数 | (float型) arg : 計算対象の値。 |
| 戻り値 | (float型) 計算結果の値。 |
| 使用例 |
float f = sqrt(2.0); print(f); // 1.4142... |
| 関数名 | sqrt |
| 宣言形式 | varfloat sqrt( varfloat arg ) |
| 説明 |
平方根を計算します。 内部では、元の桁数の1.34倍の桁数で、ニュートン法によって計算されます。ただし 10 桁以下では、元の桁数 + 4桁 で計算されます。この余剰桁数は、将来的に( 恐らくより高精度な方向に )変更される可能性があります。 |
| 引数 | (varfloat型) arg : 計算対象の値。 |
| 戻り値 | (varfloat型) 計算結果の値。 |
| 使用例 |
digit(50); varfloat v = sqrt(2.0vf); print(v); // 1.4142... |
| 関数名 | root |
| 宣言形式 | macro root( float arg, int rootPower ) |
| 説明 | N乗根を計算します。 |
| 引数 |
(float型) arg : 計算対象の値。 (int型) rootPower : N乗根のN。 |
| 戻り値 | (float型) 計算結果の値。 |
| 使用例 |
float f = root(2.0, 3); print(f); // 1.259921... |
| 関数名 | root |
| 宣言形式 | varfloat root( varfloat arg, varint p ) |
| 説明 |
N乗根を計算します。 内部では、元の桁数の1.34倍の桁数で、ニュートン法によって計算されます。ただし 10 桁以下では、元の桁数 + 4桁 で計算されます。この余剰桁数は、将来的に( 恐らくより高精度な方向に )変更される可能性があります。 |
| 引数 |
(varfloat型) arg : 計算対象の値。 (varint型) p : N乗根のN。 |
| 戻り値 | (varfloat型) 計算結果の値。 |
| 使用例 |
digit(50); varfloat v = root(2.0vf,3v); print(v); // 1.259921... |
| 関数名 | root |
| 宣言形式 | varfloat root( varfloat arg, varfloat vfp ) |
| 説明 |
N乗根を計算します。 内部では、元の桁数の1.34倍の桁数で、ニュートン法によって計算されます。ただし 10 桁以下では、元の桁数 + 4桁 で計算されます。この余剰桁数は、将来的に( 恐らくより高精度な方向に )変更される可能性があります。なお、この関数の第二引数は、常に整数であると見なされます。この関数は、電卓ソフトなどで数値リテラルが浮動小数点数と見なされるモードにおける、利便性確保のためだけにサポートされています。通常の利用シーンでは使用する利点は特に無いため、root( varfloat, varint ) を使用してください。 |
| 引数 |
(varfloat型) arg : 計算対象の値。 (varfloat型) vfp : N乗根のN。 |
| 戻り値 | (varfloat型) 計算結果の値。 |
| 関数名 | abs |
| 宣言形式 | macro abs( float arg ) |
| 説明 | 絶対値を計算します。 |
| 引数 | (float型) arg : 計算対象の値。 |
| 戻り値 | (float型) 計算結果の値。 |
| 使用例 |
float f = abs(-1.2); print(f); // 1.2 |
| 関数名 | abs |
| 宣言形式 | macro abs( int arg ) |
| 説明 | 絶対値を計算します。 |
| 引数 | (int型) arg : 計算対象の値。 |
| 戻り値 | (int型) 計算結果の値。 |
| 使用例 |
int i = abs(-123); print(i); // 123 |
| 関数名 | abs |
| 宣言形式 | varfloat abs( varfloat arg ) |
| 説明 | 絶対値を計算します。 |
| 引数 | (varfloat型) arg : 計算対象の値。 |
| 戻り値 | (varfloat型) 計算結果の値。 |
| 使用例 |
digit(50); varfloat v = abs(-1.2vf); print(v); // 1.2 |
| 関数名 | abs |
| 宣言形式 | varint abs( varint arg ) |
| 説明 | 絶対値を計算します。 |
| 引数 | (varint型) arg : 計算対象の値。 |
| 戻り値 | (varint型) 計算結果の値。 |
| 使用例 |
digit(50); varint v = abs(-123v); print(v); // 123 |
| 関数名 | max |
| 宣言形式 | macro max( float arg1, float arg2 ) |
| 説明 | 2つの引数の内、大きい方を返します。 |
| 引数 |
(float型) arg1 : 計算対象の値。 (float型) arg2 : 計算対象の値。 |
| 戻り値 | (float型) 計算結果の値。 |
| 関数名 | max |
| 宣言形式 | macro max( int arg1, int arg2 ) |
| 説明 | 2つの引数の内、大きい方を返します。 |
| 引数 |
(int型) arg1 : 計算対象の値。 (int型) arg2 : 計算対象の値。 |
| 戻り値 | (int型) 計算結果の値。 |
| 関数名 | max |
| 宣言形式 | varfloat max( varfloat arg1, varfloat arg2 ) |
| 説明 | 2つの引数の内、大きい方を返します。 |
| 引数 |
(varfloat型) arg1 : 計算対象の値。 (varfloat型) arg2 : 計算対象の値。 |
| 戻り値 | (varfloat型) 計算結果の値。 |
| 関数名 | max |
| 宣言形式 | varint max( varint arg1, varint arg2 ) |
| 説明 | 2つの引数の内、大きい方を返します。 |
| 引数 |
(varint型) arg1 : 計算対象の値。 (varint型) arg2 : 計算対象の値。 |
| 戻り値 | (varint型) 計算結果の値。 |
| 関数名 | min |
| 宣言形式 | macro min( float arg1, float arg2 ) |
| 説明 | 2つの引数の内、小さい方を返します。 |
| 引数 |
(float型) arg1 : 計算対象の値。 (float型) arg2 : 計算対象の値。 |
| 戻り値 | (float型) 計算結果の値。 |
| 関数名 | min |
| 宣言形式 | macro min( int arg1, int arg2 ) |
| 説明 | 2つの引数の内、小さい方を返します。 |
| 引数 |
(int型) arg1 : 計算対象の値。 (int型) arg2 : 計算対象の値。 |
| 戻り値 | (int型) 計算結果の値。 |
| 関数名 | min |
| 宣言形式 | varfloat min( varfloat arg1, varfloat arg2 ) |
| 説明 | 2つの引数の内、小さい方を返します。 |
| 引数 |
(varfloat型) arg1 : 計算対象の値。 (varfloat型) arg2 : 計算対象の値。 |
| 戻り値 | (varfloat型) 計算結果の値。 |
| 関数名 | min |
| 宣言形式 | varint min( varint arg1, varint arg2 ) |
| 説明 | 2つの引数の内、小さい方を返します。 |
| 引数 |
(varint型) arg1 : 計算対象の値。 (varint型) arg2 : 計算対象の値。 |
| 戻り値 | (varint型) 計算結果の値。 |
| 関数名 | fac |
| 宣言形式 | float fac( float arg ) |
| 説明 | 階乗を計算します。この関数は引数・戻り値共に float ですが、内部で近い int に丸めて計算されます。変換に伴い、誤差が精度に影響する可能性があります。厳密性を要求する場合は int 引数のものを使用してください。 |
| 引数 | (float型) arg : 計算対象の値。 |
| 戻り値 | (float型) (float) 計算結果の値。 |
| 関数名 | fac |
| 宣言形式 | macro fac( int arg ) |
| 説明 | 階乗を計算します。 |
| 引数 | (int型) arg : 計算対象の値。 |
| 戻り値 | (int型) 計算結果の値。 |
| 関数名 | fac |
| 宣言形式 | varint fac( varint arg ) |
| 説明 | 階乗を計算します。 |
| 引数 | (varint型) arg : 計算対象の値。 |
| 戻り値 | (varint型) 計算結果の値。 |
| 関数名 | fac |
| 宣言形式 | varfloat fac( varfloat arg ) |
| 説明 | 階乗を計算します。 |
| 引数 | (varfloat型) arg : 計算対象の値。 |
| 戻り値 | (varfloat型) 計算結果の値。 |
| 関数名 | sin |
| 宣言形式 | macro sin( float arg ) |
| 説明 | サイン(正弦)関数を計算します。 |
| 引数 | (float型) arg : 計算対象の値。 |
| 戻り値 | (float型) 計算結果の値。 |
| 使用例 |
float f = sin(1.0); print(f); // 0.84147... |
| 関数名 | sin |
| 宣言形式 | varfloat sin( varfloat arg ) |
| 説明 |
サイン(正弦)関数を計算します。 内部では、「 元の桁数の1.34倍 + 引数のオーダーの10倍 」の桁数で、マクローリン展開によって計算されます。ただし 10 桁以下では、「 元の桁数 + 4桁 + 引数のオーダーの10倍 」の桁数で計算されます。この余剰桁数は、将来的に( 恐らくより高精度な方向に )変更される可能性があります。 0 ~ π/2 の範囲以外の引数に対しては、三角関数の対称性と周期性を利用し、内部では 0 ~ π の範囲の値を使用して計算されます。 |
| 引数 | (varfloat型) arg : 計算対象の値。 |
| 戻り値 | (varfloat型) 計算結果の値。 |
| 使用例 |
digit(50); varfloat v = sin(1.0vf); print(v); // 0.84147... |
| 関数名 | cos |
| 宣言形式 | macro cos( float arg ) |
| 説明 | コサイン(余弦)関数を計算します。 |
| 引数 | (float型) arg : 計算対象の値。 |
| 戻り値 | (float型) 計算結果の値。 |
| 使用例 |
float f = cos(1.0); print(f); // 0.5403... |
| 関数名 | cos |
| 宣言形式 | varfloat cos( varfloat arg ) |
| 説明 |
コサイン(余弦)関数を計算します。 内部では、「 元の桁数の1.34倍 + 引数のオーダーの10倍 」の桁数で、マクローリン展開によって計算されます。ただし 10 桁以下では、「 元の桁数 + 4桁 + 引数のオーダーの10倍 」の桁数で計算されます。この余剰桁数は、将来的に( 恐らくより高精度な方向に )変更される可能性があります。 0 ~ π/2 の範囲以外の引数に対しては、三角関数の対称性と周期性を利用し、内部では 0 ~ π の範囲の値を使用して計算されます。 |
| 引数 | (varfloat型) arg : 計算対象の値。 |
| 戻り値 | (varfloat型) 計算結果の値。 |
| 使用例 |
digit(50); varfloat v = cos(1.0vf); print(v); // 0.5403... |
| 関数名 | tan |
| 宣言形式 | macro tan( float arg ) |
| 説明 | タンジェント(正接)関数を計算します。 |
| 引数 | (float型) arg : 計算対象の値。 |
| 戻り値 | (float型) 計算結果の値。 |
| 使用例 |
float f = tan(1.0); print(f); // 1.5574... |
| 関数名 | tan |
| 宣言形式 | varfloat tan( varfloat arg ) |
| 説明 |
タンジェント(正接)関数を計算します。 内部では、元の桁数の2.1倍の桁数で、「 tan(x) = sin(x) / cos(x) 」によって計算されます。ただし 10 桁以下では、「 元の桁数 + 4桁 」の桁数で計算されます。この余剰桁数は、将来的に( 恐らくより高精度な方向に )変更される可能性があります。 |
| 引数 | (varfloat型) arg : 計算対象の値。 |
| 戻り値 | (varfloat型) 計算結果の値。 |
| 使用例 |
digit(50); varfloat v = tan(1.0vf); print(v); // 1.5574... |
| 関数名 | asin |
| 宣言形式 | macro asin( float arg ) |
| 説明 | アークサイン関数(サインの逆関数)を計算します。 |
| 引数 | (float型) arg : 計算対象の値。 |
| 戻り値 | (float型) 計算結果の値。 |
| 関数名 | asin |
| 宣言形式 | varfloat asin( varfloat arg ) |
| 説明 |
アークサイン関数(サインの逆関数)を計算します。 内部では、元の桁数の1.34倍の桁数で、「 絶対値が0.7以下の引数についてはマクローリン展開、それより外側はニュートン法 」によって計算されます。ただし 10 桁以下では、「 元の桁数 + 4桁 」の桁数で計算されます。この余剰桁数は、将来的に( 恐らくより高精度な方向に )変更される可能性があります。 |
| 引数 | (varfloat型) arg : 計算対象の値。 |
| 戻り値 | (varfloat型) 計算結果の値。 |
| 関数名 | acos |
| 宣言形式 | macro acos( float arg ) |
| 説明 | アークコサイン関数(コサインの逆関数)を計算します。 |
| 引数 | (float型) arg : 計算対象の値。 |
| 戻り値 | (float型) 計算結果の値。 |
| 関数名 | acos |
| 宣言形式 | varfloat acos( varfloat arg ) |
| 説明 |
アークコサイン関数(コサインの逆関数)を計算します。 内部では、元の桁数の1.34倍の桁数で、「 acos(x) = π/2 - asin(x) 」によって計算されます。ただし 10 桁以下では、「 元の桁数 + 4桁 」の桁数で計算されます。この余剰桁数は、将来的に( 恐らくより高精度な方向に )変更される可能性があります。 |
| 引数 | (varfloat型) arg : 計算対象の値。 |
| 戻り値 | (varfloat型) 計算結果の値。 |
| 関数名 | atan |
| 宣言形式 | macro atan( float arg ) |
| 説明 | アークタンジェント関数(タンジェントの逆関数)を計算します。 |
| 引数 | (float型) arg : 計算対象の値。 |
| 戻り値 | (float型) 計算結果の値。 |
| 関数名 | atan |
| 宣言形式 | varfloat atan( varfloat arg ) |
| 説明 |
アークタンジェント関数(タンジェントの逆関数)を計算します。 内部では、元の桁数の1.34倍の桁数で、「 絶対値が0.7以下の引数についてはマクローリン展開、それより外側はニュートン法 」によって計算されます。ただし 10 桁以下では、「 元の桁数 + 4桁 」の桁数で計算されます。この余剰桁数は、将来的に( 恐らくより高精度な方向に )変更される可能性があります。 |
| 引数 | (varfloat型) arg : 計算対象の値。 |
| 戻り値 | (varfloat型) 計算結果の値。 |
| 関数名 | sinh |
| 宣言形式 | macro sinh( float arg ) |
| 説明 | ハイパボリックサイン関数を計算します。 |
| 引数 | (float型) arg : 計算対象の値。 |
| 戻り値 | (float型) 計算結果の値。 |
| 関数名 | sinh |
| 宣言形式 | varfloat sinh( varfloat arg ) |
| 説明 |
ハイパボリックサイン関数を計算します。 内部では、元の桁数の2.1倍の桁数で、「 sinh(x) = ( exp(x) - exp(-x) ) / 2 」によって計算されます。ただし 10 桁以下では、「 元の桁数 + 4桁 」の桁数で計算されます。この余剰桁数は、将来的に( 恐らくより高精度な方向に )変更される可能性があります。 |
| 引数 | (varfloat型) arg : 計算対象の値。 |
| 戻り値 | (varfloat型) 計算結果の値。 |
| 関数名 | cosh |
| 宣言形式 | macro cosh( float arg ) |
| 説明 | ハイパボリックコサイン関数を計算します。 |
| 引数 | (float型) arg : 計算対象の値。 |
| 戻り値 | (float型) 計算結果の値。 |
| 関数名 | cosh |
| 宣言形式 | varfloat cosh( varfloat arg ) |
| 説明 |
ハイパボリックコサイン関数を計算します。 内部では、元の桁数の2.1倍の桁数で、「 sinh(x) = ( exp(x) + exp(-x) ) / 2 」によって計算されます。ただし 10 桁以下では、「 元の桁数 + 4桁 」の桁数で計算されます。この余剰桁数は、将来的に( 恐らくより高精度な方向に )変更される可能性があります。 |
| 引数 | (varfloat型) arg : 計算対象の値。 |
| 戻り値 | (varfloat型) 計算結果の値。 |
| 関数名 | tanh |
| 宣言形式 | macro tanh( float arg ) |
| 説明 | ハイパボリックタンジェント関数を計算します。 |
| 引数 | (float型) arg : 計算対象の値。 |
| 戻り値 | (float型) 計算結果の値。 |
| 関数名 | tanh |
| 宣言形式 | varfloat tanh( varfloat arg ) |
| 説明 |
ハイパボリックタンジェント関数を計算します。 内部では、元の桁数の2.8倍の桁数で、「 sinh(x) = ( exp(x) - exp(-x) ) / ( exp(x) + exp(-x) ) 」によって計算されます。ただし 10 桁以下では、「 元の桁数 + 4桁 」の桁数で計算されます。この余剰桁数は、将来的に( 恐らくより高精度な方向に )変更される可能性があります。 |
| 引数 | (varfloat型) arg : 計算対象の値。 |
| 戻り値 | (varfloat型) 計算結果の値。 |
| 関数名 | asinh |
| 宣言形式 | macro asinh( float arg ) |
| 説明 | ハイパボリックサインの逆関数を計算します。 |
| 引数 | (float型) arg : 計算対象の値。 |
| 戻り値 | (float型) 計算結果の値。 |
| 関数名 | asinh |
| 宣言形式 | varfloat asinh( varfloat arg ) |
| 説明 |
ハイパボリックサインの逆関数を計算します。 内部では、元の桁数の2.1倍の桁数で、「 asinh(x) = ln( x + √( x*x + 1 ) ) 」によって計算されます。ただし 10 桁以下では、「 元の桁数 + 4桁 」の桁数で計算されます。この余剰桁数は、将来的に( 恐らくより高精度な方向に )変更される可能性があります。 |
| 引数 | (varfloat型) arg : 計算対象の値。 |
| 戻り値 | (varfloat型) 計算結果の値。 |
| 関数名 | acosh |
| 宣言形式 | macro acosh( float arg ) |
| 説明 | ハイパボリックコサインの逆関数を計算します。 |
| 引数 | (float型) arg : 計算対象の値。 |
| 戻り値 | (float型) 計算結果の値。 |
| 関数名 | acosh |
| 宣言形式 | varfloat acosh( varfloat arg ) |
| 説明 |
ハイパボリックコサインの逆関数を計算します。 内部では、元の桁数の2.1倍の桁数で、「 acosh(x) = ln( x + √( x*x - 1 ) ) 」によって計算されます。ただし 10 桁以下では、「 元の桁数 + 4桁 」の桁数で計算されます。この余剰桁数は、将来的に( 恐らくより高精度な方向に )変更される可能性があります。 |
| 引数 | (varfloat型) arg : 計算対象の値。 |
| 戻り値 | (varfloat型) 計算結果の値。 |
| 関数名 | atanh |
| 宣言形式 | macro atanh( float arg ) |
| 説明 | ハイパボリックタンジェントの逆関数を計算します。 |
| 引数 | (float型) arg : 計算対象の値。 |
| 戻り値 | (float型) 計算結果の値。 |
| 関数名 | atanh |
| 宣言形式 | varfloat atanh( varfloat arg ) |
| 説明 |
ハイパボリックタンジェントの逆関数を計算します。 内部では、元の桁数の2.1倍の桁数で、「 絶対値が0.9以下の引数については atanh(x) = 1/2 * log(1+x)/log(1-x) 」によって、それより外側はニュートン法によって計算されます。ただし 10 桁以下では、「 元の桁数 + 4桁 」の桁数で計算されます。この余剰桁数は、将来的に( 恐らくより高精度な方向に )変更される可能性があります。関数の対称性を利用し、負の引数については、正の引数における値を利用して計算されます。 古いバージョンでは、-0.7 以下(負の無限大側)の引数について値を求められません。計算が終わらないか、0 が返されます。この問題は VCSSL 3.3.2 において修正されました。 |
| 引数 | (varfloat型) arg : 計算対象の値。 |
| 戻り値 | (varfloat型) 計算結果の値。 |
| 関数名 | deg |
| 宣言形式 | macro deg( float rad ) |
| 説明 | 角度の単位変換です。弧度法(ラジアン)の角度を、度数法の角度に変換します。 |
| 引数 | (float型) rad : 弧度法(ラジアン)の角度。 |
| 戻り値 | (float型) 度数法の角度。 |
| 使用例 |
float f = deg(PI); print(f); // 180.0 |
| 関数名 | deg |
| 宣言形式 | varfloat deg(varfloat rad) |
| 説明 |
角度の単位変換です。弧度法(ラジアン)の角度を、度数法の角度に変換します。 内部では、元の桁数の1.34倍の桁数で、「 ラジアン数 = 度数 * π / 180 」によって計算されます。 |
| 引数 | (varfloat型) rad : 弧度法(ラジアン)の角度。 |
| 戻り値 | (varfloat型) 度数法の角度。 |
| 使用例 |
digit(50); varfloat v = deg(pi()); print(v); // 179.999...9; print( round(v, 40v, HALF_UP) ); // 180.0 |
| 関数名 | rad |
| 宣言形式 | macro rad( float deg ) |
| 説明 | 角度の単位変換です。度数法の角度を、弧度法(ラジアン)の角度に変換します。 |
| 引数 | (float型) deg : 度数法の角度。 |
| 戻り値 | (float型) 弧度法(ラジアン)の角度。 |
| 使用例 |
float f = rad(180.0); print(f); // 3.14... |
| 関数名 | rad |
| 宣言形式 | varfloat rad(varfloat deg) |
| 説明 |
角度の単位変換です。度数法の角度を、弧度法(ラジアン)の角度に変換します。 内部では、元の桁数の1.34倍の桁数で、「 度数 = ラジアン数 * 180 / π 」によって計算されます。 |
| 引数 | (varfloat型) deg : 度数法の角度。 |
| 戻り値 | (varfloat型) 弧度法(ラジアン)の角度。 |
| 使用例 |
digit(50); varfloat v = rad(180.0vf); print(v); // 3.14... |











