Sql

BigQueryのNUMERICとFLOATの違いは何ですか?



What Is Difference Between Numeric



解決:

私は現在の答えが好きです。理由の証拠としてこれを追加したいNUMERICが必要です:

SELECT 4.35 * 100 a_float、CAST(4.35 AS NUMERIC)* 100 a_numeric

ここに画像の説明を入力してください



これはバグではありません。これは、IEEEがフロートを処理する必要があると定義している方法です。その間NUMERICは、人間が期待するものに近い動作を示します。

の別の証拠のために数値の有用性、この回答はその方法を示していますNUMERICは、JavaScriptが通常処理するには大きすぎる数値を処理できます。



この問題についてBigQueryのせいにする前に、他のほとんどのプログラミング言語でも同じことができることを確認できます。 Python、例:

ここに画像の説明を入力してください


かなりの違いがあります:



  • 範囲:FLOATは±2 ^ 1023まで大きくなる可能性があります(ただし、この範囲内のすべての整数を表すことはできません)

  • ゼロに近い精度:ゼロに近い、FLOATは2 ^ -1022と同じくらい正確にすることができます。

  • NaN / Inf:FLOATには「数値ではない」と正と負の「無限」の値がありますが、NUMERICはそうではありません。

  • ストレージサイズ:それぞれNUMERICには16バイトのストレージが必要ですが、FLOATは8バイトしか必要としません。

  • 予測不可能な性質:Ajayが示唆するように、FLOATは、正確に表すことができる数値が、通常関心のある数値と実際にはそれほど一致しないということです。そのため、浮動小数点は、ある程度の誤差が許容される物理量に使用する必要があります。財務計算のように、予測可能で正確な人間が予測できる結果が必要な場合は、数値


主な違いは、Floats / Doublesはバイナリ浮動小数点型であり、Numericは値を浮動小数点型として格納することです。したがって、Numericははるかに高い精度を持ち、通常、高度な精度を必要とする金融(金融)アプリケーションで使用されます。ただし、パフォーマンスの面では、数値はdouble型やfloat型よりも低速です。数値は、10進形式の精度内で任意の数値を100%正確に表すことができますが、FloatおよびDoubleは、それぞれの形式の精度内の数値であっても、すべての数値を正確に表すことはできません。