仮数の最下位ビットがランダムな値に設定されている場合、浮動小数点演算にどのような影響が生じる可能性がありますか?
説明:
PicoLisp言語は、2 つの「機械語」からなるセルという 1 つの構造体を使用してすべての値を割り当てます。32 ビット システムでは、これはセルが 2 つの 32 ビット ポインターまたは整数の 8 バイト構造であることを意味します。セルはそのサイズに合わせて調整されます。つまり、ワードの少なくとも下位 3 ビットは、タイプおよび GC タグ データとして自由に使用できます。
PicoLisp は非常にミニマリストです。この言語に欠けている (多くの) ことの 1 つは、浮動小数点数のサポートがまったくないことです。代わりに、ドキュメントで「スケーリングされた固定小数点」表現と呼ばれるものに完全に依存しています。浮動小数点サポートを追加してみるのは楽しいだろうと思いました。
32 ビット システムでは、64 ビット float は 1 つのセル内にきれいに収まります。これは、割り当てシステムがほとんど同じであることを意味しますが、1 つの小さな問題を除いて、double によってすべての 64 ビットが使用されることを意味します。しかし、GC はビット 0 を GC マーク ビットとして使用することを想定しています。単純に進めると、double に実際に格納された値に関係なく、収集サイクルごとにビット 0 がゼロに設定されます。
(これは、サイズとエンディアンがすべて正しく並んでいると仮定しています。この目的のために、そうであると仮定します。そうでない場合、質問全体は完全に無関係であり、必然的に別の戦略を使用する必要があります。)
では、ハードウェアの浮動小数点演算を使用した汎用数学にとって、これはどの程度の問題なのでしょうか?
double の精度を少し下げるだけであれば、実際には問題ではないと思います。インタープリターの浮動小数点演算がユーザーが期待するほど正確ではなく、そうすべきであることが文書化されている限り、それは実際には問題ではありません。厳密に正確な動作が必要な場合は、フィックスポイントまたはライブラリなどにフォールバックします。私の直感的な理解では、これは最下位ビットであるため、これが当てはまるはずです(文字列に変換しても表示されません..?)。
一方、浮動小数点は魔法です。この種のビット操作は、実際に数学の有用性や、あらゆる種類の一貫した結果を生成する能力に深刻な影響を与える可能性がありますか?
(私は、アロケータの他のいくつかの実装の可能性を検討しました。私は、この戦略が途方もなく馬鹿げているかどうかに特に興味があります。なぜなら、それが最も簡単で、私は怠け者だからです。)