「バンカーズアルゴリズム」の秘密が明らかに!フロントエンド テーブルでカスタム数式を使用して「偶数に丸める」

「バンカーズアルゴリズム」の秘密が明らかに!フロントエンド テーブルでカスタム数式を使用して「偶数に丸める」

銀行の収益モデルとは何でしょうか? 3 つの言葉: 情報の非対称性です。銀行は預金者から資金を集めて貸し出し、その金利差がいわゆる「利益」となります。

私の国では、中国人民銀行は、各四半期末の20日を銀行の利息決済日と定めており、利息は年に4回決済されます。そのため、預金者に支払われる利息は、毎年非常に頻繁に計算する必要があります。利息を計算する場合、小数点の扱い方が重要になり、利益額を決定する上で重要な詳細になります。

一般的に、小数点以下の桁数を残す場合は四捨五入がよく使用されることは誰もが知っています。 5未満の数字は切り上げられて切り捨てられ、5以上の数字は切り上げられて切り捨てられます。すべての位置の数字は自然に計算されるため、確率計算によれば、切り上げられた数字は0から9の間で均等に分布します。

10 回の預金利息の計算をモデルとして、銀行員の視点からこのアルゴリズムについて考えてみましょう。

破棄された値には、0.000、0.001、0.002、0.003、0.004 が含まれます。銀行にとっては、破棄された内容は支払う必要がなくなるため、破棄された部分を「利益」として理解できます。

丸められた数字には、0.005、0.006、0.007、0.008、0.009 が含まれます。銀行にとって、丸められた数字は損失を引き起こし、対応する損失額は、0.005、0.004、0.003、0.002、0.001 です。

切り捨てられて丸められる数字は 0 から 9 の間で均等に分散されるため、10 回の預金ごとに丸めることで銀行側が得る利益は次のようになります。

0.000 + 0.001 + 0.002 + 0.003 + 0.004 - 0.005 - 0.004 - 0.003 - 0.002 - 0.001 = -0.005

一般的に言えば、10 回の取引ごとに端数処理により 0.005 元の損失が発生します。つまり、利息計算ごとに 0.0005 元の損失が発生します。ある銀行に 5,000 万人の預金者がいると仮定します。単純に四捨五入の誤差によって毎年失われる金額は次のようになります。

 パブリッククラスクライアント{
パブリック静的void メイン文字列[] 引数){
//銀行口座数5000万
int アカウント番号= 5000 * 10000 ;
//中国人民銀行の規定によれば、各四半期の最終月の20日は銀行の利息支払日である。
ダブルコスト= 0.0005 * accountNum * 4 ;
System . out . println ( "銀行が毎年失う金額: " + cost );
}
}

計算結果は、「銀行が毎年失う金額:100000.0」となります。ちょっとした端数処理が毎年10万元の損失につながるとは信じられないかもしれません。しかし、現実世界の環境では、実際の損失ははるかに大きくなる可能性があります。

この状況は米国のプライベートバンカーによって発見され、この問題を解決するための修正アルゴリズムが提案されました。

「捨てられた数字の値が 5 未満の場合、そのまま捨てられます。

破棄された数字の値が 6 以上の場合、繰り上がり後に破棄されます。

破棄された数字の値が 5 に等しい場合、次の 2 つのケースがあります。5 の後に他の数字がある場合 (0 ではない)、その数字は繰り上がり、破棄されます。5 の後に 0 が続く場合 (つまり、5 が最後の数字である場合)、5 の前の数字のパリティを使用して、その数字を繰り上がるかどうかが決定されます。奇数は繰り上がり、偶数は破棄されます。 ”

上記のすべてを 1 つの文にまとめると、最も近い 5 に切り上げ、5 の後の数が 0 でない場合は 1 を加え、5 の後の数が 0 の場合はその数が奇数か偶数かを検討します。5 の前の数が偶数の場合はそれを破棄し、5 の前の数が奇数の場合は 1 を加えます。

例として、2 桁の精度を使用します。

10.5551 = 10.56

10.555 = 10.56

10.545 = 10.54

(インターネットからの写真)

簡単に言えば、「最も近い偶数に切り上げる」という銀行家のアルゴリズムにより、データをより科学的かつ正確に処理することができます。

実際のアプリケーションでは、大量のデータを含む表計算でバンカーアルゴリズムが最もよく使用されますが、表計算では一連の組み込み式による複利計算が必要になります。一般ユーザーにとっては、理解するのも使用するのも面倒で複雑です。

この問題をより便利に解決するために、このような要件を満たすカスタム関数を使用できます。これにより、ユーザーはカスタム関数名を覚えておくだけで、このようなルールで関数を使用できるようになります。

次に、フロントエンドテーブルで「最も近い偶数に丸める」を素早く実装する方法を見てみましょう。

まず、関数の名前と、関数が受け取るパラメータの数を定義する必要があります。私たちが実現したいのは 2 つのパラメータを渡すことです。「1」は丸める必要がある値、「2」は保持する小数点以下の桁数であり、値と桁数に基づいて丸めが実行されます。

 var FdaFunction = 関数(){
this .name = "FDA" ;
this.minArgs = 1 ;
this.maxArgs = 2 ;
};

次に、ユーザーの理解と使用を容易にするために、このカスタム関数に説明を追加する必要があります。

 FdaFunction.prototype.description = 関数( ) {
戻る{
説明: 「指定された小数点以下の桁数を保持したまま、値を最も近い整数に丸めます」
パラメータ: [{
名前: "値"
繰り返し可能: false
オプション: false
}, {
名前: 「場所」
繰り返し可能: false
オプション: false
}]
}
}

最後に、重要なステップ、つまり関数の論理演算をevaluateに配置します。渡された値に対して何らかの判断を行い、正規表現を使用していくつかの一致を作成します。 「5 in double」を達成するには、繰り上がるかどうかを決定するために切り捨てる必要がある最後の桁の値も判断する必要があります。詳細については、添付の完全なデモを参照してください。

 FdaFunction.prototype.evaluate = function ( context , num , places ) {

if ( ! isNaN ( parseInt ( 数値)) && ! isNaN ( parseInt ( 場所))) {
コンソール.log ( "評価" )
num = numGeneral ( num );
if ( ! isNumber ( num )) {
数値を返します
}
var d = 場所|| 0 ;
var m = Math.pow ( 10 , d ) ;
var n = + ( d ? num * m : num ) .toFixed ( 8 ); // 丸め誤差を避ける
var i = Math.floor ( n )
f = n - i ;
var e = 1e-8 ; // f の丸め誤差を考慮する
var r = f > 0.5 - e && f < 0.5 + e ? ( i % 2 == 0 ? i : i + 1 ): Math . round ( n );
var 結果= d ? r / m : r ;

if ( 場所> 0 ) {
var s_x = 結果.toString ();
var pos_decimal = s_x . indexOf ( "." );
pos_decimal < 0場合
pos_decimal = s_x . 長さ;
s_x + = "." ;
}
while ( s_x . length <= pos_decimal + places ) {
s_x + = "0" ;
}
s_x を返します
} それ以外{
結果を返します
}
} それ以外{
"#VALUE!" を返します
}

}

完全なデモをダウンロード:

https://gcdn.grapecity.com.cn...​​

カスタム数式について詳しく知りたい場合は、次のリンクを確認してください。

https://demo.grapecity.com.cn...​​

<<:  2022 年に予測されるロボット技術のトレンド トップ 10

>>:  機械学習で人気のアルゴリズムトップ10

ブログ    

推薦する

3分レビュー:2021年11月の自動運転業界の完全な概要

チップ不足と疫病の影響により、今年初めから自動運転産業の発展は減速を余儀なくされたが、数か月の回復を...

ロボットになることでのみロボットを倒すことができる

人類はロボットの時代に突入している。ロボット工学の専門家や哲学者の中には、将来、高度に知能化されたロ...

ビッグデータと人工知能が決済に革命を起こす

事実は、データ技術の進歩と発展により、仮想カードと電子ウォレットが支払い管理により適したものになって...

PyTorch と TensorFlow のベンチマーク: どちらのプラットフォームが NLP モデル推論をより速く実行しますか?

PyTorch と TensorFlow のどちらが優れているかという議論は、決して終わることはあ...

2020年に人工知能がIT業界を変える

21 世紀は人類史上刺激的な時代であり、人々の日常生活に技術の進歩が起こっています。今では、患者の健...

わずか 2 分で、シングル ビューの 3D 生成が高速かつ良好に行えます。北京大学などが新しいRepaint123法を提案

画像を 3D に変換する方法としては、通常、スコア蒸留サンプリング (SDS) 方式が採用されていま...

AI 主導の DevOps はどのようにビジネス変革を実現できるのでしょうか?

[[420376]] AI 技術を採用することで、包括的なセキュリティの基盤としてシステムにインテ...

パーソナライズされたサービス + 5G アプリケーション IBM が 2022 年の 5 つの AI 予測を発表

2022年も、疫病やサプライチェーン危機などの悪影響は続くとみられ、AIに対する消費者の信頼獲得や気...

未来を変える5つのAIトレンド

人工知能は、今の世代で最も話題になっているトピックです。人工知能は、20年後の世界がどのように発展す...

新しい展開のアイデア | Minuet: GPU での 3D スパース畳み込みの高速化

この記事は、Heart of Autonomous Driving の公開アカウントから許可を得て転...

AIがデータセンターの設計をどう変えるか

AI システムへの世界的な支出は 2023 年から 2026 年の間に 2 倍になると予想されており...

...

自動運転車の安全性保証、検証、認証の見直し

2022年2月6日にarXivにアップロードされたレビュー論文「自動運転車の安全性保証、検証、認証:...

映画の好みを予測しますか?オートエンコーダを使用して協調フィルタリングを実装する方法

推奨システムは、協調フィルタリングを使用して、ユーザーの好み情報を収集し、特定のユーザーの興味を予測...

...