JavaScript/Float16Array

概要

Float16Array は、16ビットの浮動小数点数(float16)の型付き配列を表すJavaScriptオブジェクトです。各要素は 16 ビットの浮動小数点数としてアクセス可能で、省メモリながらも十分な精度を持つ数値を効率的に操作することができます。この配列は、基盤となる ArrayBuffer 上で動作します。Float16 形式は、精度はやや落ちるものの、Float32 の半分のメモリ使用量で済むため、グラフィックス処理や機械学習など、大量のデータを扱う場面で有用です。

コンストラクタ

Float16Array()

new Float16Array(buffer [, byteOffset [, length]])
new Float16Array(length)
new Float16Array(typedArray)
new Float16Array(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の作成
const buffer = new ArrayBuffer(8);
const float16Array = new Float16Array(buffer);

// 配列の要素を設定
float16Array[0] = 3.14;
float16Array[1] = -1.5;
console.log(float16Array[0]); // 約3.14(精度に制限あり)
console.log(float16Array[1]); // 約-1.5(精度に制限あり)

// 配列のコピー
const subArray = float16Array.subarray(0, 1);
console.log(subArray[0]); // 約3.14

// Float32Arrayとの変換
const float32Array = new Float32Array(float16Array);
console.log(float32Array[0]); // より精度の高い3.14の表現

Float16の精度と範囲

  • 正規化数の範囲: 約 ±6.10 × 10^-5 から ±65504
  • 最小精度: 約 0.0000000596046(2^-14)
  • 小数点以下の精度: 約 3桁(10進数)
  • 指数部: 5ビット
  • 仮数部: 10ビット
  • 符号部: 1ビット

メモリ効率の比較

型付き配列バイト数/要素100万要素のメモリ使用量
Float16Array2バイト約2MB
Float32Array4バイト約4MB
Float64Array8バイト約8MB

注意点

  • Float16Array は 16 ビットの浮動小数点数のみを扱い、他の型の値を代入すると精度が落ちる場合がある
  • バッファのバイト長は Float16Array.BYTES_PER_ELEMENT(2バイト)の倍数である必要がある
  • Float32Arrayよりも精度が低いため、高精度な計算には向かない
  • ブラウザや実行環境によってはネイティブサポートがなく、エミュレーションによる実装の場合がある
  • WebGLやWebGPUなどのグラフィックスAPI、機械学習ライブラリとの連携に適している

一般的な用途

  • グラフィックス処理(頂点データ、テクスチャ座標など)
  • 機械学習モデルの重みやアクティベーション
  • ネットワーク転送の最適化
  • モバイルデバイスでのメモリ効率化
  • センサーデータの保存と処理

関連オブジェクト

ブラウザサポート

  • Chrome 108+
  • Firefox 102+
  • Safari 16.4+
  • Edge 108+

附録

静的プロパティ

Float16Array.BYTES_PER_ELEMENT
Float16Array.length
Float16Array.name
Float16Array.prototype

静的アクセサ

静的メソッド

継承関係

Float16Arrayのインスタンスプロパティ

Float16Array.prototype.BYTES_PER_ELEMENT

Float16Arrayのインスタンスアクセサ

Float16Arrayのインスタンスメソッド

Float16Array.prototype.constructor()

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 ] ()

仕様

カテゴリ:JavaScript
カテゴリ:JavaScript