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

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

銀行の収益モデルとは何でしょうか? 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

ブログ    
ブログ    
ブログ    
ブログ    

推薦する

ディープラーニングは、データが不足している場合、無力なのでしょうか?ここにいくつかの良いアイデアがあります!

ディープラーニングは、データが大量にある場合、どんなに複雑な問題でも問題ありません。しかし、データが...

OpenAI の新しいモデルは大きな飛躍を示しています。AGI のプロトタイプは人類を脅かす可能性があり、アルトマンを解雇する導火線にもなりました。

サム・アルマンが解雇され、最新の内幕が明らかに!ロイター通信によると、彼が解雇されるわずか4日前に、...

Python における 7 つの主要なキーワード抽出アルゴリズムのベンチマーク

私はキーワード抽出タスクのための効率的なアルゴリズムを探していました。 目標は、データ コーパスが急...

1枚の写真を2分で3Dに変換します。テクスチャ品質とマルチビューの一貫性:新しいSOTA|北京大学が制作

写真を 3D に変換するのにかかる時間はわずか2 分です。さまざまな視点から見て、質感の品質と一貫性...

数千億ドル規模の市場:教育用ロボットは本当に実現可能か?

[[341606]]ある調査では、2025年までに中国の教育用ロボット市場は3000億ドルに達し、...

ドローンは将来何ができるのか

ドローンは、専用のリモートコントロールユニットを介して自律飛行できる無人航空機 (UAV) です。コ...

ベンジオとヒントンの絶え間ない探求:ディープラーニングアルゴリズムが脳の学習方法を明らかにする

[[384610]] 「脳の学習メカニズムや学習方法の一部を解明できれば、人工知能はさらに進歩できる...

エッジウェアハウジング: 9 つの新しいウェアハウジング技術

倉庫業界はテクノロジー主導の革命の真っ只中にあり、企業はコストを削減し、業務を最適化し、サプライチェ...

人工知能が都市の健康に革命をもたらす方法

今日、健康は精神的、社会的、政治的、経済的、都市的健康など、さまざまな分野に関連しています。今日、都...

人工知能に関する10のよくある質問への回答

人工知能は今世紀の主要な話題の一つです。 AI の能力と無限の可能性は、多くの興味深い会話や議論を生...

画像認識が最も得意な会社はどこでしょうか? Microsoft、Amazon、Google、それともIBM?

[51CTO.com クイック翻訳] 認識ソフトウェアは、特定の種類の画像を正しく分類するのに非常...

MIT は Google と提携して 7 台のマルチタスク ロボットをトレーニングし、9,600 のタスクで 89% の成功率を達成しました。

タスクの数が増えるにつれて、現在の計算方法を使用して汎用の日常的なロボットを構築するコストは法外なも...

...

...

劉厳紅が7日間で1000万人のフォロワーを獲得した背後で、スマートフィットネス業界が静かに台頭している

ジェイ・チョウの『本草綱目』のメロディーにのせて、劉恒紅の健康指導が再び始まった。 7日間でフォロワ...