Math ライブラリ


概要 - Abstract

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 秒弱の処理時間を要します。

digit( 1000 ); // 有効桁数を 1000 桁に設定
varfloat value = sin( 1.0vf ); // sin 関数を計算
print( value ); // 出力

varfloat (多倍長) 実装の数学関数では、多くが収束アルゴリズムに依存しているため、末尾の、ある程度の桁数に誤差蓄積が生じる場合があります。
この事を見越して、数学関数の内部では、数割程度(関数によって異なります)大きい桁数で計算し、値を返す時点で余剰桁を切り捨てるようになっています。
ただし、これはあくまで補助的なものであり、あらゆる有効桁数と引数に対して、常に誤差蓄積の桁が排除される事を保証するものではありません。
関数にもよりますが、誤差蓄積の検証は、一般に数十桁程度の有効桁数による用途と、常用的な範囲の引数を想定して行われています。
数千から数万桁の用途や、特異点近傍の引数については、一般に誤差蓄積が大きくなるため、切り捨てる余剰桁に収まらず、関数の戻り値の末尾にも現れる場合があります。
従って、そうした用途では、呼び出し側でも誤差蓄積を考慮した大きめの有効桁数で使用し、余剰桁を切り捨てるなどの措置を行ってください。


目次 - Index

const float PI
float精度における、円周率の値です。多倍長精度の varfloat 値を得るには pi() を使用してください。
const float E
float精度における、ネイピア数(自然対数の底)の値です。多倍長精度の varfloat 値を得るには exp( 1.0vf ) で計算してください。
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 / π 」によって計算されます。

構造体 - Structs

- なし - None -


変数 - Variables

文法的定義
- Signature
const float PI
変数名
- Name
PI
役割
- Role
float精度における、円周率の値です。多倍長精度の varfloat 値を得るには pi() を使用してください。
文法的定義
- Signature
const float E
変数名
- Name
E
役割
- Role
float精度における、ネイピア数(自然対数の底)の値です。多倍長精度の varfloat 値を得るには exp( 1.0vf ) で計算してください。

関数 - Functions

文法的定義
- Signature
macro random()
関数名
- Name
random
役割
- Role
0.0以上1.0未満の値を返します。なお、VCSSL3.0.20以前のドキュメントにおいて「0.0 から 1.0 までの乱数値を返します。」と記載されていましたが、この表現は曖昧であり、実際には1.0に完全に一致する値が返される事はありません。
戻り値
- Return
(float型) 乱数値
使用例
- Example
float v = random();
print(v); // 0.367283... (random)
文法的定義
- Signature
macro rand()
関数名
- Name
rand
役割
- Role
randomと同様です。現在はrandomの使用が推奨されます。この関数の名称は、整数型の乱数と混同を招くため、現在の使用は推奨されません。将来的に、この関数の型の変更が検討される可能性があります。
戻り値
- Return
(float型) 乱数値
文法的定義
- Signature
varfloat pi()
関数名
- Name
pi
役割
- Role
円周率の値を計算します。
内部では、元の桁数の1.1倍の桁数で、ガウス=ルジャンドル法によって計算されます。
高精度な円周率の値は、周期性がある関数の計算や、周期境界をもつシミュレーション(回転系や写像系など)において、引数や座標の円周率による剰余を求めるために必要となります。実際に Math ライブラリでも、varfloat型の三角関数を求める計算などで使用されています。
戻り値
- Return
(varfloat型) 円周率の値。
使用例
- Example
digit(100);
varfloat pi = pi();
print(pi); // 3.14...
文法的定義
- Signature
macro exp( float arg )
関数名
- Name
exp
役割
- Role
ネイピア数を低とする指数関数を計算します。
引数
- Arguments
(float型) arg : 計算対象の値。
戻り値
- Return
(float型) 計算結果の値。
使用例
- Example
float e = exp(1.0);
print(e); // 2.71...
文法的定義
- Signature
varfloat exp( varfloat arg )
関数名
- Name
exp
役割
- Role
ネイピア数を低とする指数関数を計算します。
内部では、元の桁数の 1.34 倍の桁数で、マクローリン展開によって計算されます。ただし 10 桁以下では、元の桁数 + 4桁 で計算されます。この余剰桁数は、将来的に( 恐らくより高精度な方向に )変更される可能性があります。
引数
- Arguments
(varfloat型) arg : 計算対象の値。
戻り値
- Return
(varfloat型) 計算結果の値。
使用例
- Example
digit(50);
varfloat e = exp(1.0vf);
print(e); // 2.71...
文法的定義
- Signature
macro pow( float arg1, float arg2 )
関数名
- Name
pow
役割
- Role
指数関数を計算します。
引数
- Arguments
(float型) arg1 : 低。
(float型) arg2 : 指数。
戻り値
- Return
(float型) 計算結果の値。
使用例
- Example
float f = pow(1.2, 3.4);
print(f); // 1.8587...
文法的定義
- Signature
varfloat pow( varfloat arg1, varint arg2 )
関数名
- Name
pow
役割
- Role
指数が整数の指数関数を計算します。
内部では、「 元の桁数 + 指数 ( arg2 ) のオーダーの絶対値 」の2.1倍の桁数で、乗算の繰り返しによって計算されます。ただし 10 桁以下では、元の桁数 + 4桁 で計算されます。この余剰桁数は、将来的に( 恐らくより高精度な方向に )変更される可能性があります。
引数
- Arguments
(varfloat型) arg1 : 低。
(varint型) arg2 : 指数。
戻り値
- Return
(varfloat型) 計算結果の値。
文法的定義
- Signature
varfloat pow( varfloat arg1, varfloat arg2 )
関数名
- Name
pow
役割
- Role
指数が浮動小数点数(実数)の指数関数を計算します。
内部では、「 元の桁数 + 指数 ( arg2 ) のオーダーの絶対値 」の1.2倍の桁数で、 + マクローリン展開もしくは指数関数と対数関数の組み合わせによって計算されます。ただし 10 桁以下では、元の桁数 + 4桁 で計算されます。この余剰桁数は、将来的に( 恐らくより高精度な方向に )変更される可能性があります。
引数
- Arguments
(varfloat型) arg1 : 低。
(varfloat型) arg2 : 指数。
戻り値
- Return
(varfloat型) 計算結果の値。
使用例
- Example
digit(50);
varfloat v = pow(1.2vf, 3.4vf);
print(v); // 1.8587...
文法的定義
- Signature
varfloat pow( varint arg1, varfloat arg2 )
関数名
- Name
pow
役割
- Role
指数関数を計算します。
内部では、arg1 を varfloat 型にキャストした上で、 pow( varfloat, varfloat ) が使用されます。
引数
- Arguments
(varint型) arg1 : 低。
(varfloat型) arg2 : 指数。
戻り値
- Return
(varfloat型) 計算結果の値。
文法的定義
- Signature
macro ln( float arg )
関数名
- Name
ln
役割
- Role
自然対数を計算します。log と同じです。
引数
- Arguments
(float型) arg : 計算対象の値。
戻り値
- Return
(float型) 計算結果の値。
使用例
- Example
float f = ln(10.0);
print(f); // 2.302585...
文法的定義
- Signature
macro ln( varfloat arg )
関数名
- Name
ln
役割
- Role
自然対数を計算します。log と同じです。
内部ではそのまま log(varfloat) が使用されています。
引数
- Arguments
(varfloat型) arg : 計算対象の値。
戻り値
- Return
(varfloat型) 計算結果の値。
使用例
- Example
digit(50);
varfloat v = ln(10.0vf);
print(v); // 2.302585...
文法的定義
- Signature
macro log( float arg )
関数名
- Name
log
役割
- Role
自然対数を計算します。ln と同じです。
引数
- Arguments
(float型) arg : 計算対象の値。
戻り値
- Return
(float型) 計算結果の値。
使用例
- Example
float f = log(10.0);
print(f); // 2.302585...
文法的定義
- Signature
varfloat log( varfloat arg )
関数名
- Name
log
役割
- Role
自然対数を計算します。ln と同じです。
内部では、元の桁数の1.34倍の桁数で、「 1以上の引数ではニュートン法、1以下の引数ではテイラー展開 」によって計算されます。ただし 10 桁以下では、元の桁数 + 4桁 で計算されます。この余剰桁数は、将来的に( 恐らくより高精度な方向に )変更される可能性があります。
引数
- Arguments
(varfloat型) arg : 計算対象の値。
戻り値
- Return
(varfloat型) 計算結果の値。
使用例
- Example
digit(50);
varfloat v = log(10.0vf);
print(v); // 2.302585...
文法的定義
- Signature
macro log10( float arg )
関数名
- Name
log10
役割
- Role
常用対数を計算します。
引数
- Arguments
(float型) arg : 計算対象の値。
戻り値
- Return
(float型) 計算結果の値。
使用例
- Example
float f = log(10.0);
print(f); // 1.0
文法的定義
- Signature
varfloat log10( varfloat arg )
関数名
- Name
log10
役割
- Role
常用対数を計算します。
内部では、元の桁数の2.2倍の桁数で、「 log10(x) = ln(x) / ln(10) 」によって計算されます。ただし 10 桁以下では、元の桁数 + 4桁 で計算されます。この余剰桁数は、将来的に( 恐らくより高精度な方向に )変更される可能性があります。
引数
- Arguments
(varfloat型) arg : 計算対象の値。
戻り値
- Return
(varfloat型) 計算結果の値。
使用例
- Example
digit(50);
varfloat v = log10(10.0vf);
print(v);
文法的定義
- Signature
macro sqrt( float arg )
関数名
- Name
sqrt
役割
- Role
平方根を計算します。
引数
- Arguments
(float型) arg : 計算対象の値。
戻り値
- Return
(float型) 計算結果の値。
使用例
- Example
float f = sqrt(2.0);
print(f); // 1.4142...
文法的定義
- Signature
varfloat sqrt( varfloat arg )
関数名
- Name
sqrt
役割
- Role
平方根を計算します。
内部では、元の桁数の1.34倍の桁数で、ニュートン法によって計算されます。ただし 10 桁以下では、元の桁数 + 4桁 で計算されます。この余剰桁数は、将来的に( 恐らくより高精度な方向に )変更される可能性があります。
引数
- Arguments
(varfloat型) arg : 計算対象の値。
戻り値
- Return
(varfloat型) 計算結果の値。
使用例
- Example
digit(50);
varfloat v = sqrt(2.0vf);
print(v); // 1.4142...
文法的定義
- Signature
macro root( float arg, int rootPower )
関数名
- Name
root
役割
- Role
N乗根を計算します。
引数
- Arguments
(float型) arg : 計算対象の値。
(int型) rootPower : N乗根のN。
戻り値
- Return
(float型) 計算結果の値。
使用例
- Example
float f = root(2.0, 3);
print(f); // 1.259921...
文法的定義
- Signature
varfloat root( varfloat arg, varint p )
関数名
- Name
root
役割
- Role
N乗根を計算します。
内部では、元の桁数の1.34倍の桁数で、ニュートン法によって計算されます。ただし 10 桁以下では、元の桁数 + 4桁 で計算されます。この余剰桁数は、将来的に( 恐らくより高精度な方向に )変更される可能性があります。
引数
- Arguments
(varfloat型) arg : 計算対象の値。
(varint型) p : N乗根のN。
戻り値
- Return
(varfloat型) 計算結果の値。
使用例
- Example
digit(50);
varfloat v = root(2.0vf,3v);
print(v); // 1.259921...
文法的定義
- Signature
varfloat root( varfloat arg, varfloat vfp )
関数名
- Name
root
役割
- Role
N乗根を計算します。
内部では、元の桁数の1.34倍の桁数で、ニュートン法によって計算されます。ただし 10 桁以下では、元の桁数 + 4桁 で計算されます。この余剰桁数は、将来的に( 恐らくより高精度な方向に )変更される可能性があります。なお、この関数の第二引数は、常に整数であると見なされます。この関数は、電卓ソフトなどで数値リテラルが浮動小数点数と見なされるモードにおける、利便性確保のためだけにサポートされています。通常の利用シーンでは使用する利点は特に無いため、root( varfloat, varint ) を使用してください。
引数
- Arguments
(varfloat型) arg : 計算対象の値。
(varfloat型) vfp : N乗根のN。
戻り値
- Return
(varfloat型) 計算結果の値。
文法的定義
- Signature
macro abs( float arg )
関数名
- Name
abs
役割
- Role
絶対値を計算します。
引数
- Arguments
(float型) arg : 計算対象の値。
戻り値
- Return
(float型) 計算結果の値。
使用例
- Example
float f = abs(-1.2);
print(f); // 1.2
文法的定義
- Signature
macro abs( int arg )
関数名
- Name
abs
役割
- Role
絶対値を計算します。
引数
- Arguments
(int型) arg : 計算対象の値。
戻り値
- Return
(int型) 計算結果の値。
使用例
- Example
int i = abs(-123);
print(i); // 123
文法的定義
- Signature
varfloat abs( varfloat arg )
関数名
- Name
abs
役割
- Role
絶対値を計算します。
引数
- Arguments
(varfloat型) arg : 計算対象の値。
戻り値
- Return
(varfloat型) 計算結果の値。
使用例
- Example
digit(50);
varfloat v = abs(-1.2vf);
print(v); // 1.2
文法的定義
- Signature
varint abs( varint arg )
関数名
- Name
abs
役割
- Role
絶対値を計算します。
引数
- Arguments
(varint型) arg : 計算対象の値。
戻り値
- Return
(varint型) 計算結果の値。
使用例
- Example
digit(50);
varint v = abs(-123v);
print(v); // 123
文法的定義
- Signature
macro max( float arg1, float arg2 )
関数名
- Name
max
役割
- Role
2つの引数の内、大きい方を返します。
引数
- Arguments
(float型) arg1 : 計算対象の値。
(float型) arg2 : 計算対象の値。
戻り値
- Return
(float型) 計算結果の値。
文法的定義
- Signature
macro max( int arg1, int arg2 )
関数名
- Name
max
役割
- Role
2つの引数の内、大きい方を返します。
引数
- Arguments
(int型) arg1 : 計算対象の値。
(int型) arg2 : 計算対象の値。
戻り値
- Return
(int型) 計算結果の値。
文法的定義
- Signature
varfloat max( varfloat arg1, varfloat arg2 )
関数名
- Name
max
役割
- Role
2つの引数の内、大きい方を返します。
引数
- Arguments
(varfloat型) arg1 : 計算対象の値。
(varfloat型) arg2 : 計算対象の値。
戻り値
- Return
(varfloat型) 計算結果の値。
文法的定義
- Signature
varint max( varint arg1, varint arg2 )
関数名
- Name
max
役割
- Role
2つの引数の内、大きい方を返します。
引数
- Arguments
(varint型) arg1 : 計算対象の値。
(varint型) arg2 : 計算対象の値。
戻り値
- Return
(varint型) 計算結果の値。
文法的定義
- Signature
macro min( float arg1, float arg2 )
関数名
- Name
min
役割
- Role
2つの引数の内、小さい方を返します。
引数
- Arguments
(float型) arg1 : 計算対象の値。
(float型) arg2 : 計算対象の値。
戻り値
- Return
(float型) 計算結果の値。
文法的定義
- Signature
macro min( int arg1, int arg2 )
関数名
- Name
min
役割
- Role
2つの引数の内、小さい方を返します。
引数
- Arguments
(int型) arg1 : 計算対象の値。
(int型) arg2 : 計算対象の値。
戻り値
- Return
(int型) 計算結果の値。
文法的定義
- Signature
varfloat min( varfloat arg1, varfloat arg2 )
関数名
- Name
min
役割
- Role
2つの引数の内、小さい方を返します。
引数
- Arguments
(varfloat型) arg1 : 計算対象の値。
(varfloat型) arg2 : 計算対象の値。
戻り値
- Return
(varfloat型) 計算結果の値。
文法的定義
- Signature
varint min( varint arg1, varint arg2 )
関数名
- Name
min
役割
- Role
2つの引数の内、小さい方を返します。
引数
- Arguments
(varint型) arg1 : 計算対象の値。
(varint型) arg2 : 計算対象の値。
戻り値
- Return
(varint型) 計算結果の値。
文法的定義
- Signature
float fac( float arg )
関数名
- Name
fac
役割
- Role
階乗を計算します。この関数は引数・戻り値共に float ですが、内部で近い int に丸めて計算されます。変換に伴い、誤差が精度に影響する可能性があります。厳密性を要求する場合は int 引数のものを使用してください。
引数
- Arguments
(float型) arg : 計算対象の値。
戻り値
- Return
(float型) (float) 計算結果の値。
文法的定義
- Signature
macro fac( int arg )
関数名
- Name
fac
役割
- Role
階乗を計算します。
引数
- Arguments
(int型) arg : 計算対象の値。
戻り値
- Return
(int型) 計算結果の値。
文法的定義
- Signature
varint fac( varint arg )
関数名
- Name
fac
役割
- Role
階乗を計算します。
引数
- Arguments
(varint型) arg : 計算対象の値。
戻り値
- Return
(varint型) 計算結果の値。
文法的定義
- Signature
varfloat fac( varfloat arg )
関数名
- Name
fac
役割
- Role
階乗を計算します。
引数
- Arguments
(varfloat型) arg : 計算対象の値。
戻り値
- Return
(varfloat型) 計算結果の値。
文法的定義
- Signature
macro sin( float arg )
関数名
- Name
sin
役割
- Role
サイン(正弦)関数を計算します。
引数
- Arguments
(float型) arg : 計算対象の値。
戻り値
- Return
(float型) 計算結果の値。
使用例
- Example
float f = sin(1.0);
print(f); // 0.84147...
文法的定義
- Signature
varfloat sin( varfloat arg )
関数名
- Name
sin
役割
- Role
サイン(正弦)関数を計算します。
内部では、「 元の桁数の1.34倍 + 引数のオーダーの10倍 」の桁数で、マクローリン展開によって計算されます。ただし 10 桁以下では、「 元の桁数 + 4桁 + 引数のオーダーの10倍 」の桁数で計算されます。この余剰桁数は、将来的に( 恐らくより高精度な方向に )変更される可能性があります。
0 ~ π/2 の範囲以外の引数に対しては、三角関数の対称性と周期性を利用し、内部では 0 ~ π の範囲の値を使用して計算されます。
引数
- Arguments
(varfloat型) arg : 計算対象の値。
戻り値
- Return
(varfloat型) 計算結果の値。
使用例
- Example
digit(50);
varfloat v = sin(1.0vf);
print(v); // 0.84147...
文法的定義
- Signature
macro cos( float arg )
関数名
- Name
cos
役割
- Role
コサイン(余弦)関数を計算します。
引数
- Arguments
(float型) arg : 計算対象の値。
戻り値
- Return
(float型) 計算結果の値。
使用例
- Example
float f = cos(1.0);
print(f); // 0.5403...
文法的定義
- Signature
varfloat cos( varfloat arg )
関数名
- Name
cos
役割
- Role
コサイン(余弦)関数を計算します。
内部では、「 元の桁数の1.34倍 + 引数のオーダーの10倍 」の桁数で、マクローリン展開によって計算されます。ただし 10 桁以下では、「 元の桁数 + 4桁 + 引数のオーダーの10倍 」の桁数で計算されます。この余剰桁数は、将来的に( 恐らくより高精度な方向に )変更される可能性があります。
0 ~ π/2 の範囲以外の引数に対しては、三角関数の対称性と周期性を利用し、内部では 0 ~ π の範囲の値を使用して計算されます。
引数
- Arguments
(varfloat型) arg : 計算対象の値。
戻り値
- Return
(varfloat型) 計算結果の値。
使用例
- Example
digit(50);
varfloat v = cos(1.0vf);
print(v); // 0.5403...
文法的定義
- Signature
macro tan( float arg )
関数名
- Name
tan
役割
- Role
タンジェント(正接)関数を計算します。
引数
- Arguments
(float型) arg : 計算対象の値。
戻り値
- Return
(float型) 計算結果の値。
使用例
- Example
float f = tan(1.0);
print(f); // 1.5574...
文法的定義
- Signature
varfloat tan( varfloat arg )
関数名
- Name
tan
役割
- Role
タンジェント(正接)関数を計算します。
内部では、元の桁数の2.1倍の桁数で、「 tan(x) = sin(x) / cos(x) 」によって計算されます。ただし 10 桁以下では、「 元の桁数 + 4桁 」の桁数で計算されます。この余剰桁数は、将来的に( 恐らくより高精度な方向に )変更される可能性があります。
引数
- Arguments
(varfloat型) arg : 計算対象の値。
戻り値
- Return
(varfloat型) 計算結果の値。
使用例
- Example
digit(50);
varfloat v = tan(1.0vf);
print(v); // 1.5574...
文法的定義
- Signature
macro asin( float arg )
関数名
- Name
asin
役割
- Role
アークサイン関数(サインの逆関数)を計算します。
引数
- Arguments
(float型) arg : 計算対象の値。
戻り値
- Return
(float型) 計算結果の値。
文法的定義
- Signature
varfloat asin( varfloat arg )
関数名
- Name
asin
役割
- Role
アークサイン関数(サインの逆関数)を計算します。
内部では、元の桁数の1.34倍の桁数で、「 絶対値が0.7以下の引数についてはマクローリン展開、それより外側はニュートン法 」によって計算されます。ただし 10 桁以下では、「 元の桁数 + 4桁 」の桁数で計算されます。この余剰桁数は、将来的に( 恐らくより高精度な方向に )変更される可能性があります。
引数
- Arguments
(varfloat型) arg : 計算対象の値。
戻り値
- Return
(varfloat型) 計算結果の値。
文法的定義
- Signature
macro acos( float arg )
関数名
- Name
acos
役割
- Role
アークコサイン関数(コサインの逆関数)を計算します。
引数
- Arguments
(float型) arg : 計算対象の値。
戻り値
- Return
(float型) 計算結果の値。
文法的定義
- Signature
varfloat acos( varfloat arg )
関数名
- Name
acos
役割
- Role
アークコサイン関数(コサインの逆関数)を計算します。
内部では、元の桁数の1.34倍の桁数で、「 acos(x) = π/2 - asin(x) 」によって計算されます。ただし 10 桁以下では、「 元の桁数 + 4桁 」の桁数で計算されます。この余剰桁数は、将来的に( 恐らくより高精度な方向に )変更される可能性があります。
引数
- Arguments
(varfloat型) arg : 計算対象の値。
戻り値
- Return
(varfloat型) 計算結果の値。
文法的定義
- Signature
macro atan( float arg )
関数名
- Name
atan
役割
- Role
アークタンジェント関数(タンジェントの逆関数)を計算します。
引数
- Arguments
(float型) arg : 計算対象の値。
戻り値
- Return
(float型) 計算結果の値。
文法的定義
- Signature
varfloat atan( varfloat arg )
関数名
- Name
atan
役割
- Role
アークタンジェント関数(タンジェントの逆関数)を計算します。
内部では、元の桁数の1.34倍の桁数で、「 絶対値が0.7以下の引数についてはマクローリン展開、それより外側はニュートン法 」によって計算されます。ただし 10 桁以下では、「 元の桁数 + 4桁 」の桁数で計算されます。この余剰桁数は、将来的に( 恐らくより高精度な方向に )変更される可能性があります。
引数
- Arguments
(varfloat型) arg : 計算対象の値。
戻り値
- Return
(varfloat型) 計算結果の値。
文法的定義
- Signature
macro sinh( float arg )
関数名
- Name
sinh
役割
- Role
ハイパボリックサイン関数を計算します。
引数
- Arguments
(float型) arg : 計算対象の値。
戻り値
- Return
(float型) 計算結果の値。
文法的定義
- Signature
varfloat sinh( varfloat arg )
関数名
- Name
sinh
役割
- Role
ハイパボリックサイン関数を計算します。
内部では、元の桁数の2.1倍の桁数で、「 sinh(x) = ( exp(x) - exp(-x) ) / 2 」によって計算されます。ただし 10 桁以下では、「 元の桁数 + 4桁 」の桁数で計算されます。この余剰桁数は、将来的に( 恐らくより高精度な方向に )変更される可能性があります。
引数
- Arguments
(varfloat型) arg : 計算対象の値。
戻り値
- Return
(varfloat型) 計算結果の値。
文法的定義
- Signature
macro cosh( float arg )
関数名
- Name
cosh
役割
- Role
ハイパボリックコサイン関数を計算します。
引数
- Arguments
(float型) arg : 計算対象の値。
戻り値
- Return
(float型) 計算結果の値。
文法的定義
- Signature
varfloat cosh( varfloat arg )
関数名
- Name
cosh
役割
- Role
ハイパボリックコサイン関数を計算します。
内部では、元の桁数の2.1倍の桁数で、「 sinh(x) = ( exp(x) + exp(-x) ) / 2 」によって計算されます。ただし 10 桁以下では、「 元の桁数 + 4桁 」の桁数で計算されます。この余剰桁数は、将来的に( 恐らくより高精度な方向に )変更される可能性があります。
引数
- Arguments
(varfloat型) arg : 計算対象の値。
戻り値
- Return
(varfloat型) 計算結果の値。
文法的定義
- Signature
macro tanh( float arg )
関数名
- Name
tanh
役割
- Role
ハイパボリックコタンジェント関数を計算します。
引数
- Arguments
(float型) arg : 計算対象の値。
戻り値
- Return
(float型) 計算結果の値。
文法的定義
- Signature
varfloat tanh( varfloat arg )
関数名
- Name
tanh
役割
- Role
ハイパボリックコタンジェント関数を計算します。
内部では、元の桁数の2.8倍の桁数で、「 sinh(x) = ( exp(x) - exp(-x) ) / ( exp(x) + exp(-x) ) 」によって計算されます。ただし 10 桁以下では、「 元の桁数 + 4桁 」の桁数で計算されます。この余剰桁数は、将来的に( 恐らくより高精度な方向に )変更される可能性があります。
引数
- Arguments
(varfloat型) arg : 計算対象の値。
戻り値
- Return
(varfloat型) 計算結果の値。
文法的定義
- Signature
macro asinh( float arg )
関数名
- Name
asinh
役割
- Role
ハイパボリックサインの逆関数を計算します。
引数
- Arguments
(float型) arg : 計算対象の値。
戻り値
- Return
(float型) 計算結果の値。
文法的定義
- Signature
varfloat asinh( varfloat arg )
関数名
- Name
asinh
役割
- Role
ハイパボリックサインの逆関数を計算します。
内部では、元の桁数の2.1倍の桁数で、「 asinh(x) = ln( x + √( x*x + 1 ) ) 」によって計算されます。ただし 10 桁以下では、「 元の桁数 + 4桁 」の桁数で計算されます。この余剰桁数は、将来的に( 恐らくより高精度な方向に )変更される可能性があります。
引数
- Arguments
(varfloat型) arg : 計算対象の値。
戻り値
- Return
(varfloat型) 計算結果の値。
文法的定義
- Signature
macro acosh( float arg )
関数名
- Name
acosh
役割
- Role
ハイパボリックコサインの逆関数を計算します。
引数
- Arguments
(float型) arg : 計算対象の値。
戻り値
- Return
(float型) 計算結果の値。
文法的定義
- Signature
varfloat acosh( varfloat arg )
関数名
- Name
acosh
役割
- Role
ハイパボリックコサインの逆関数を計算します。
内部では、元の桁数の2.1倍の桁数で、「 acosh(x) = ln( x + √( x*x - 1 ) ) 」によって計算されます。ただし 10 桁以下では、「 元の桁数 + 4桁 」の桁数で計算されます。この余剰桁数は、将来的に( 恐らくより高精度な方向に )変更される可能性があります。
引数
- Arguments
(varfloat型) arg : 計算対象の値。
戻り値
- Return
(varfloat型) 計算結果の値。
文法的定義
- Signature
macro atanh( float arg )
関数名
- Name
atanh
役割
- Role
ハイパボリックタンジェントの逆関数を計算します。
引数
- Arguments
(float型) arg : 計算対象の値。
戻り値
- Return
(float型) 計算結果の値。
文法的定義
- Signature
varfloat atanh( varfloat arg )
関数名
- Name
atanh
役割
- Role
ハイパボリックタンジェントの逆関数を計算します。
内部では、元の桁数の2.1倍の桁数で、「 絶対値が0.9以下の引数については atanh(x) = 1/2 * log(1+x)/log(1-x) 」によって、それより外側はニュートン法によって計算されます。ただし 10 桁以下では、「 元の桁数 + 4桁 」の桁数で計算されます。この余剰桁数は、将来的に( 恐らくより高精度な方向に )変更される可能性があります。関数の対称性を利用し、負の引数については、正の引数における値を利用して計算されます。
古いバージョンでは、-0.7 以下(負の無限大側)の引数について値を求められません。計算が終わらないか、0 が返されます。この問題は VCSSL 3.3.2 において修正されました。
引数
- Arguments
(varfloat型) arg : 計算対象の値。
戻り値
- Return
(varfloat型) 計算結果の値。
文法的定義
- Signature
macro deg( float rad )
関数名
- Name
deg
役割
- Role
角度の単位変換です。弧度法(ラジアン)の角度を、度数法の角度に変換します。
引数
- Arguments
(float型) rad : 弧度法(ラジアン)の角度。
戻り値
- Return
(float型) 度数法の角度。
使用例
- Example
float f = deg(PI);
print(f); // 180.0
文法的定義
- Signature
varfloat deg(varfloat rad)
関数名
- Name
deg
役割
- Role
角度の単位変換です。弧度法(ラジアン)の角度を、度数法の角度に変換します。
内部では、元の桁数の1.34倍の桁数で、「 ラジアン数 = 度数 * π / 180 」によって計算されます。
引数
- Arguments
(varfloat型) rad : 弧度法(ラジアン)の角度。
戻り値
- Return
(varfloat型) 度数法の角度。
使用例
- Example
digit(50);
varfloat v = deg(pi());
print(v); // 179.999...9;
print( round(v, 40v, HALF_UP) ); // 180.0
文法的定義
- Signature
macro rad( float deg )
関数名
- Name
rad
役割
- Role
角度の単位変換です。度数法の角度を、弧度法(ラジアン)の角度に変換します。
引数
- Arguments
(float型) deg : 度数法の角度。
戻り値
- Return
(float型) 弧度法(ラジアン)の角度。
使用例
- Example
float f = rad(180.0);
print(f); // 3.14...
文法的定義
- Signature
varfloat rad(varfloat deg)
関数名
- Name
rad
役割
- Role
角度の単位変換です。度数法の角度を、弧度法(ラジアン)の角度に変換します。
内部では、元の桁数の1.34倍の桁数で、「 度数 = ラジアン数 * 180 / π 」によって計算されます。
引数
- Arguments
(varfloat型) deg : 度数法の角度。
戻り値
- Return
(varfloat型) 弧度法(ラジアン)の角度。
使用例
- Example
digit(50);
varfloat v = rad(180.0vf);
print(v); // 3.14...