JavaScript/Float16Array
表示
概要
[編集]Float16Array は、16ビットの浮動小数点数(float16)の型付き配列を表すJavaScriptオブジェクトです。各要素は 16 ビットの浮動小数点数としてアクセス可能で、省メモリながらも十分な精度を持つ数値を効率的に操作することができます。この配列は、基盤となる ArrayBuffer 上で動作します。Float16 形式は、精度はやや落ちるものの、Float32 の半分のメモリ使用量で済むため、グラフィックス処理や機械学習など、大量のデータを扱う場面で有用です。
コンストラクタ
[編集]Float16Array()
[編集]newFloat16Array(buffer[,byteOffset[,length]])newFloat16Array(length)newFloat16Array(typedArray)newFloat16Array(iterable)
- 引数
- buffer: ArrayBuffer または SharedArrayBuffer
- byteOffset (オプション): バイト単位でのオフセット位置(デフォルトは 0)
- length (オプション): 配列の要素数
- length (数値): 配列の要素数を指定する
- typedArray: 既存の型付き配列を基にする
- iterable: 配列や反復可能オブジェクト(Map や Set など)
- 戻り値: 指定された条件に基づく新しい Float16Array
プロパティ
[編集]Float16Array.BYTES_PER_ELEMENT
[編集]- 各要素のバイト長(固定値: 2)
Float16Array.prototype.length
[編集]- 配列内の要素数を返す(読み取り専用)
Float16Array.prototype.buffer
[編集]- 基盤となる ArrayBuffer を返す
Float16Array.prototype.byteOffset
[編集]- ArrayBuffer 内の先頭位置をバイト単位で返す
Float16Array.prototype.byteLength
[編集]- バッファの全体のバイト長を返す
メソッド
[編集]Float16Array.prototype.set()
[編集]float16Array.set(array[,offset])
- 引数
- array: コピー元の配列(型付き配列または通常の配列)
- offset (オプション): 書き込みの開始インデックス(デフォルトは 0)
- 戻り値: なし
- 説明: 指定された配列から要素をコピーして設定する
Float16Array.prototype.subarray()
[編集]float16Array.subarray(begin[,end])
- 引数
- begin: 開始インデックス
- end (オプション): 終了インデックス(デフォルトは配列の終端)
- 戻り値: 元の配列の部分範囲を共有する新しい Float16Array
使用例
[編集]// Float16Arrayの作成constbuffer=newArrayBuffer(8);constfloat16Array=newFloat16Array(buffer);// 配列の要素を設定float16Array[0]=3.14;float16Array[1]=-1.5;console.log(float16Array[0]);// 約3.14(精度に制限あり)console.log(float16Array[1]);// 約-1.5(精度に制限あり)// 配列のコピーconstsubArray=float16Array.subarray(0,1);console.log(subArray[0]);// 約3.14// Float32Arrayとの変換constfloat32Array=newFloat32Array(float16Array);console.log(float32Array[0]);// より精度の高い3.14の表現
Float16の精度と範囲
[編集]- 正規化数の範囲: 約 ±6.10 × 10^-5 から ±65504
- 最小精度: 約 0.0000000596046(2^-14)
- 小数点以下の精度: 約 3桁(10進数)
- 指数部: 5ビット
- 仮数部: 10ビット
- 符号部: 1ビット
メモリ効率の比較
[編集]型付き配列 | バイト数/要素 | 100万要素のメモリ使用量 |
Float16Array | 2バイト | 約2MB |
Float32Array | 4バイト | 約4MB |
Float64Array | 8バイト | 約8MB |
注意点
[編集]- Float16Array は 16 ビットの浮動小数点数のみを扱い、他の型の値を代入すると精度が落ちる場合がある
- バッファのバイト長は Float16Array.BYTES_PER_ELEMENT(2バイト)の倍数である必要がある
- Float32Arrayよりも精度が低いため、高精度な計算には向かない
- ブラウザや実行環境によってはネイティブサポートがなく、エミュレーションによる実装の場合がある
- WebGLやWebGPUなどのグラフィックスAPI、機械学習ライブラリとの連携に適している
一般的な用途
[編集]- グラフィックス処理(頂点データ、テクスチャ座標など)
- 機械学習モデルの重みやアクティベーション
- ネットワーク転送の最適化
- モバイルデバイスでのメモリ効率化
- センサーデータの保存と処理
関連オブジェクト
[編集]ブラウザサポート
[編集]- Chrome 108+
- Firefox 102+
- Safari 16.4+
- Edge 108+
附録
[編集]静的プロパティ
[編集]静的アクセサ
[編集]静的メソッド
[編集]継承関係
[編集]Float16Arrayのインスタンスプロパティ
[編集]Float16Arrayのインスタンスアクセサ
[編集]Float16Arrayのインスタンスメソッド
[編集]TypedArrayのインスタンスプロパティ
[編集]TypedArrayのインスタンスアクセサ
[編集]- get TypedArray.prototype.buffer
- get TypedArray.prototype.byteLength
- get TypedArray.prototype.byteOffset
- get TypedArray.prototype.length
- TypedArray.prototype [ Symbol.toStringTag ] (accessor)
TypedArrayのインスタンスメソッド
[編集]- TypedArray.prototype.at()
- TypedArray.prototype.constructor()
- TypedArray.prototype.copyWithin()
- TypedArray.prototype.entries()
- TypedArray.prototype.every()
- TypedArray.prototype.fill()
- TypedArray.prototype.filter()
- TypedArray.prototype.find()
- TypedArray.prototype.findIndex()
- TypedArray.prototype.findLast()
- TypedArray.prototype.findLastIndex()
- TypedArray.prototype.forEach()
- TypedArray.prototype.includes()
- TypedArray.prototype.indexOf()
- TypedArray.prototype.join()
- TypedArray.prototype.keys()
- TypedArray.prototype.lastIndexOf()
- TypedArray.prototype.map()
- TypedArray.prototype.reduce()
- TypedArray.prototype.reduceRight()
- TypedArray.prototype.reverse()
- TypedArray.prototype.set()
- TypedArray.prototype.slice()
- TypedArray.prototype.some()
- TypedArray.prototype.sort()
- TypedArray.prototype.subarray()
- TypedArray.prototype.toLocaleString()
- TypedArray.prototype.toReversed()
- TypedArray.prototype.toSorted()
- TypedArray.prototype.toString()
- TypedArray.prototype.values()
- TypedArray.prototype.with()
- TypedArray.prototype [ Symbol.iterator ] ()