asm.jsの数値演算とライブラリ関数

いちごパック > asm.jsの解説 > asm.jsの数値演算とライブラリ関数

数値演算

asm.jsの最適化関数では、次の数値演算が利用できます。 多くの場合、演算をするたびに型は不明になります。 したがって、変数に保存する前に変数の型を変換する'必要があります。
asm.jsでは、+(数値)はdouble変換を意味します。 また、intishの値は~~(数値)とするとsignedに変換できます。 比較演算のようにintを引数としてとれない場合は、|0などで型を変換する必要があります。
演算子引数と戻り値
+(数値)signed→double,unsigned→double,float→double,double→double
-(数値)int→intish,float→float,double→double
~(数値)intish→signed
!(数値)int→int
(数値)+(数値)int→intish,float?→floatish,double→double
(数値)-(数値)int→intish,float?→floatish,double→double
(数値)*(数値)float?→floatish,double→double
(数値)/(数値)signed→intish,unsigned→intish,float?→floatish,double→double
(数値)%(数値)signed→intish,unsigned→intish,double→double
(数値)&(数値)intish→signed
(数値)|(数値)intish→signed
(数値)^(数値)intish→signed
(数値)<<(数値)intish→signed
(数値)>>(数値)intish→signed
(数値)>>>(数値)intish→unsigned
(数値)==(数値)signed→int,unsigned→int,float→int,double→int
(数値)!=(数値)signed→int,unsigned→int,float→int,double→int
(数値)<(数値)signed→int,unsigned→int,float→int,double→int
(数値)<=(数値)signed→int,unsigned→int,float→int,double→int
(数値)>(数値)signed→int,unsigned→int,float→int,double→int
(数値)>=(数値)signed→int,unsigned→int,float→int,double→int

ライブラリ関数

asm.jsの最適化関数では、次の数値演算用のライブラリ関数が利用できます。 これらの関数は、モジュール第1引数の標準ライブラリとして与える必要があります。 また、これら以外のライブラリ関数は、外部関数として扱う必要があります。
関数引数と戻り値内容
Math.cosdouble?→double引数のcosを求めます。
Math.sindouble?→double引数のsinを求めます。
Math.tandouble?→double引数のtanを求めます。
Math.acosdouble?→double引数のacosを求めます。
Math.asindouble?→double引数のasinを求めます。
Math.atandouble?→double引数のatanを求めます。
Math.atan2(double?,double?)→double原点と引数の点のなす角であるatan2()を求めます。
Math.expdouble?→doubleeを引数乗した値を求めます。
Math.logdouble?→double引数の対数を求めます。
Math.ceildouble?→double,float?->float引数以上で最小の整数を求めます。
Math.floordouble?→double,float?->float引数以下で最大の整数を求めます。
Math.sqrtdouble?→double,float?->float引数の平方根を求めます。
Math.abssigned→signed,double?→double,float?->float引数の絶対値を求めます。
Math.min(int...)→int,(double...)→double最小値を求めます。
Math.max(int...)→int,(double...)→double最大値を求めます。
Math.pow(double?,double?)→double第1引数の第2引数乗を求めます。
Math.imul(int,int)→signed32ビット整数の乗算値を求めます。
Math.frounddouble→float引数をfloatに丸めた値を求めます。
Infinity(なし)→double定数です。
NaN(なし)→double定数です。
Math.E(なし)→double数学で使われる定数です。
Math.LN10(なし)→double数学で使われる定数です。
Math.LN2(なし)→double数学で使われる定数です。
Math.LOG2E(なし)→double数学で使われる定数です。
Math.LOG10E(なし)→double数学で使われる定数です。
Math.PI(なし)→double数学で使われる定数です。
Math.SQRT1_2(なし)→double数学で使われる定数です。
Math.SQRT2(なし)→double数学で使われる定数です。

型つき配列

asm.jsの最適化関数では、モジュール第3引数のメモリ配列を次のいずれかの配列に対応づけると、 配列データの読み書きができます。 配列データのアクセス時には、インデックスに右シフトをつけた形で(例えば、int32array[index>>2])呼び出す必要があります。 これら以外の型を使ったり、右シフトなしで配列にアクセスすると、 asm.jsの最適化関数ではなく、通常のJavascriptとして実行されます。
関数バイト数右シフト数読み込まれるデータの型書き込み可能なデータ型
Uint8Array10intishintish
Int8Array10intishintish
Uint16Array21intishintish
Int16Array21intishintish
Uint32Array42intishintish
Int32Array42intishintish
Float32Array42float?floatish,double?
Float64Array83double?float?,double?