数式の端数処理と小数点精度の制御

乗算または除算が関係する計算では、Analytics は 2 つのオペランドのうち、小数点以下の桁数がより大きい側の桁数に四捨五入します。この端数処理方法は、ほとんどの数式を評価するために Analytics が使用する固定小数点演算に関連付けられています。

複数のオペランドの式(a*b/c)の場合、端数処理は式の各段階で適用されます。最初の評価された段階で開始し、式が完全に評価されるまで繰り返されます。

メモ

Analytics での端数処理方法に注意しないことは、演算エラーの最も一般的な原因の 1 つです。

固定小数点演算

Analytics の端数処理動作は、Analytics が数値演算で使用する固定小数点演算(金融関数を除く)に関連しています。Analytics は次の 2 つの理由で固定小数点演算を使用します。

  • 処理速度が向上する
  • ユーザー側で小数の桁数や丸めを制御することができる

乗算の丸め

式 1.1 * 1 .1 を考えます。正しい答えは 1.21 です。ただし、Analytics は結果を小数点 1 桁まで端数処理します。これは、オペランドの小数点桁数の大きい数であるためです。

1.1 * 1.1 = 1.2

オペランドのいずれかが小数点 2 桁の場合、Analytics は結果の小数部をオペランドの大きい方の小数点桁数まで端数処理します。この特定の式では、端数処理は不要です。

1.10 * 1.1 = 1.21

除算の丸め

式 7/3 を考えます。正しい答えは 2.333... ですが、どちらのオペランドにも小数がないため、Analytics はこれを小数なしに丸めます。

7/3 = 2

オペランドのいずれかまたは両方に小数点がある場合、Analytics は結果の小数部をオペランドの大きい方の小数点桁数まで端数処理します。

7/3.00 = 2.33 
7.000/3.00 = 2.333

小数を追加して丸めを制御する

端数処理を制御し、目的の小数点精度を得るための最も簡単な方法は、1 で式を乗算し、結果で必要な小数点精度数が続きます。たとえば、1.0000 で乗算し、結果が小数点 4 桁まで正確であることを確認します。

問題

次の式では、Analytics は結果を小数点 2 桁に端数処理します。これは、要件に合う精度ではありません。

7.21 * 2.33 = 16.80
7.21 / 2.33 = 3.09

解決策

結果の精度を高めるには、1 と任意の小数点精度で乗算します。

1.0000 * 7.21 * 2.33 = 16.7993
1.000000 * 7.21 / 2.33 = 3.094421

注意

式の最初に 1 を置きます。別の場所に 1 を置くと、精度調整が動作しない場合があります。最初の 2 つのオペランドの精度が既に端数処理を発生させているためです。

7.21 * 2.33 * 1.0000 = 16.8000
7.21 / 2.33 * 1.000000 = 3.090000

括弧を使用するときには注意してください

丸かっこを使用して数学演算の順序を指定する場合は注意してください。括弧を使用する場合、精度調整が動作しない場合があります。括弧のオペランドの精度が既に端数処理を発生させているためです。

1.0000 * (7.21 * 2.33) = 16.8000

括弧内の 1 を統合すると、問題を解決できます。

(1.0000 * 7.21 * 2.33) = 16.7993

複数オペランド式の端数処理動作

端数処理動作と小数点精度は、式のオペランド数に関係なく、同じように動作します。Analytics は、組み合わせで式を評価するときに、2 つのオペランドの小数点桁数の大きい方に結果を端数処理します。

ただし、累積端数処理が複数オペランドの式で動作する方法のため、評価される最初の 2 つのオペランドによって確立された小数点制度は、式結果に適用される精度です。

累積端数処理のもう一つの特性は、小数点精度の損失が複数オペランド式の各段階で増えるということです。

小数点 2 桁の精度の例

以下の表は、Analytics が次の複数オペランド式を計算するときに、端数処理を適用する方法を示します。

1.1 * 1.12 * 1.123 * 1.1234 = 1.5514

式の最初に評価される段階の小数点桁数の大きい方は 2 です(1.1 * 1.12)。この小数点 2 桁の精度は、複数オペランド式の残りでも保持されます(赤色の桁数で表示)。

結果の違い列は、精度の累積損失が評価の連続段階でどのように増えるのかを示します。

Analytics 計算

(評価順)

Analytics 結果

(端数処理)

端数処理されていない計算

(評価順)

 

端数処理されていない結果

 

結果の違い

1.1 * 1.12 1.23 1.1 * 1.12 1.232 0.002
1.23 * 1.123 1.381 1.232 * 1.123 1.383536 0.002536
1.381 * 1.1234 1.5514 1.383536 * 1.1234 1.5542643424 0.0028643424

精度の詳細

ACL 結果(端数処理)列では、最初の 2 つの後のすべての小数点桁数は、対応する端数処理されていない結果と比べると、不正確です。データ分析の一部として数値計算を実行するときに、不正確さの度合いは、主な問題になることが多くあります。

端数処理された結果は、結果を生成する特定の組み合わせの式のコンテキストでは、不正確ではありません。たとえば、小数点 3 桁に端数処理された 1.23 * 1.123 = 1.38129 は、ルールに従うと、1.381 です。ただし、1.23 は以前に 1.232 から端数処理されました。これは、特定の組み合わせの計算に既にある程度の不正確さが含まれていることを意味します。

小数点 5 桁の精度の例

以下の表は、Analytics が 1.00000 を加算した後に、どのように端数処理を適用し、5 桁の小数点精度を指定するのかを示します。

1.00000 * 1.1 * 1.12 * 1.123 * 1.1234 = 1.55427

式の最初に評価される段階の小数点桁数の大きい方は 5 です(1.00000 * 1.1)。この小数点 5 桁の精度は、複数オペランド式の残りでも保持されます(赤色の桁数で表示)。

Analytics 計算

(評価順)

Analytics 結果

(端数処理)

端数処理されていない計算

(評価順)

端数処理されていない結果 結果の違い
1.00000 * 1.1 1.10000 1.00000 * 1.1 1.10000 0.00000
1.10000 * 1.12 1.23200 1.10000 * 1.12 1.23200 0.00000
1.23200 * 1.123 1.38354 1.23200 * 1.123 1.383536 0.000004
1.38354 * 1.1234 1.55427 1.383536 * 1.1234 1.5542643424 0.0000056576

演算の順序を指定する

丸かっこは、計算で求められる精度レベルを決める重要な役割を果たします。丸かっこを使用して数学演算の正規順序を変更する場合は注意してください。

日歩の計算

シナリオ

年利 12% で $100,000 の日歩を計算する必要があります。

1 つのアプローチ

最初に日歩を計算してから、日率を 100,000 で乗算できます。ただし、このアプローチでは端数処理の問題が発生します。

100000 * (0.12/365) = 0.00

Analytics は最初に 0.12 を 365 で除算します。それに基づくと、Analytics の端数処理は 0.00 になります。真の結果は 0.00032876712... ですが、結果は小数点 2 桁で端数処理されるため、すべての後続の桁数が失われます。

正しい答えが 32.876712... であっても、端数処理された結果は 100000 で乗算され、0.00 になります。

代替アプローチ

最初に年利の合計金額を計算してから、金額を 365 で除算できます。このアプローチにより、端数処理の問題を解決できます。

100000 * 0.12/365 = 32.88

括弧が削除されると、計算の各段階の結果は 1 より大きく、小数点の端数処理の問題を回避します。答えはペンスまで正確になります(2 桁)。

小数点精度の動作の変更

SET MATH コマンドを使用して、数式で小数点精度の動作を変更できます。デフォルトでは、Analytics は、2 つのオペランドを評価するときに、小数点桁数の大きい方または最大値を使用します。最大数を使用すると、式の各段階で最大精度が維持されます。

コマンドラインまたは Analytics スクリプトで SET MATH を使用すると、Analytics セッション中のデフォルト動作が変更されます。以下のオプションの概要では、式 1.275 * 1.3 の異なる結果が示されます。実際の端数処理されていない結果は 1.6575 です。

コマンド 説明 1.275 * 1.3 の結果
SET MATH FIRST オペランドのペアの最初のオペランドの小数点桁数を使用します 1.658
SET MATH LAST オペランドのペアの最後のオペランドの小数点桁数を使用します 1.7
SET MATH MIN オペランドのペアで最も少ない小数点桁数を使用します 1.7
SET MATH MAX

デフォルト

オペランドのペアで最も多い小数点桁数を使用します 1.658
SET MATH の詳細については、SET コマンドを参照してください。
Analytics 14.1 ヘルプ