概要
C# には最初期から decimal
型が組み込まれており、28〜29 桁の 10 進精度を保証しています。
これは金融システムにとって強力な武器ですが、クラウド時代を見据えると標準化やハードウェア対応の在り方が問われます。
本記事では、メインフレームからクラウドへの流れと、.NET の decimal
が進化すべき方向を整理します。
メインフレームからクラウドへ
かつて金融といえば IBM メインフレームが代名詞でした。
COBOL や PL/I がハード最適化された decimal 演算を使い、勘定系システムを支えてきました。
しかし現在はオンプレミスで巨大なメインフレームを抱える時代から、クラウドファーストの時代へシフト。
銀行や証券会社も Azure、AWS、GCP を前提にシステムを設計し、メインフレームは「残す」から「縮退させつつ共存」へと変化しています。
C# の decimal
とその限界
C# の decimal
は固定長 128bit(96bit の整数部+符号+スケール)。
最大 29 桁の 10 進精度を持ちます。
- 通貨(小数2桁)
- 証券(小数2〜4桁)
- 為替(小数6桁程度)
- 金利(小数12桁程度)
これらの日常的な金融計算には十分ですが、
デリバティブやリスク管理といった金融工学の分野ではさらに高精度が求められることもあり、
decimal
だけでは足りない場面もあります。
IBM の DFP と他言語
IBM Power や z 系 CPU には DFP (decimal32/64/128) 命令が実装されています。
これを活かせるのは主に IBM XL C/C++、COBOL、PL/I など IBM エコシステムの言語です。
一方、C# の decimal
は IEEE 754 decimal とは互換性がなく、現状はすべてソフトウェア実装です。
今後のシナリオ
考えられる未来像は大きく二つです。
-
IEEE 754 decimal32/64/128 を BCL に追加
-
System.Decimal32/64/128
を導入し、ハード対応があれば命令化。 - IBM ハードを即活用でき、他ベンダの参入も容易。
-
-
既存
System.Decimal
を標準化・Intrinsic 化(推奨)- 仕様を ECMA/ISO レベルで厳密化。
- IL に抽象命令を追加し、JIT が「ハード命令があれば利用、無ければ高速ソフト」に分岐。
- 後方互換を維持しつつ、性能と一貫性を確保。
クラウド時代に必要なこと
-
オープン標準化
どのクラウドでも同じ結果が得られる decimal 演算。 -
マルチベンダ対応
x86 / ARM / RISC-V / GPU / FPGA など様々な環境で利用可能に。 -
性能最適化
ハード命令があれば利用、なければ高速ソフト実装へ。 -
エコシステム統合
SQL や金融 API とも一貫した decimal 仕様を整備。
まとめ
オンプレメインフレームからクラウド中心へシフトする時代、
.NET
が金融システムに深く食い込むためには decimal の進化がカギとなります。
まずは 既存 decimal
の標準化と Intrinsic 化を進め、
その後に IEEE decimal32/64/128 の追加を検討するのが現実的なロードマップだと考えます。