はいといいえ
簡単に言うと、提案のバリエーションは、完全に正確な10進文字列を操作するために常に使用されます。これは一般的なコンピューターのネイティブ形式ではないため、ソフトウェアで処理されますが、最近のCPU速度を考えると、それはほとんど問題になりません。重要なのは、小数部を基数10の10進文字列として格納することです。
さて、あなたの提案は、ビット32と33の間に2進数の小数点がある固定小数点数を提案しているようです。これも行われていますが、小数点以下の文字列の分数が表現できないという問題は解決されません。
ご覧のとおり、問題は、10進数の文字列の分数がx /(2 n * 5 m )の形式の有理数であり、そのような値のほとんどがx / 2nのみを表す2進数の分数では表現できないことです。
したがって、たとえば、.01と.99の間では、 .25、.50、および.75のみが正確なバイナリ表現を持ちます。これは、IEEE浮動小数点と固定小数点の提案の両方に当てはまります。
ここで、2進数の固定小数点の代わりに、10の累乗で数値を単純にスケーリングすると、すべての数値が正確になります。したがって、スケールが10 6の場合、$123.45は123450000として保存されます。
つまり、2つの選択肢があります。すべての整数は2進数または10進数で正確に表現されるため、分数を保存せずに上記のように単純にスケーリングするか、分数を保存して内部的に10進数で行うことができます。たとえば、1桁あたり4ビットを割り当てます。この形式はBCDと呼ばれます。
これらのテクニックはすべて数え切れないほど実装されているので、実際に自分で行う必要はありません。たとえば、RubyのBigDecimalを見てください。
文明をもう一度やり直す場合は、2の累乗の数を選ぶと便利かもしれません。これらの問題はすべて、小数値IRLの記述方法に直接起因します。10進数の文字列を使用しますが、これを2進数の分数として正確に表すことはほとんど不可能です。