タグ付けされたバリアント型を主な値型として使用するプログラミング言語Septemberを開発しています。型 (整数、文字列、オブジェクト、例外など) には 3 ビットが使用され、実際の値 (実際の整数、オブジェクトへのポインターなど) には 61 ビットが使用されます。
まもなく、float
言語に型を追加する時が来ます。64 ビット double のスペースがほとんどあるので、内部で double を計算に使用したいと考えました。私は実際にはストレージが 3 ビット不足しているため、各計算の後に double を四捨五入する必要があります。基本的には、仮数または指数が 3 ビット短い 61 ビットの double になります。
しかし!浮動小数点には危険が伴い、紙の上では理にかなっているように思えることを行うと、FP 数学で悲惨な結果が生じる可能性があることを知っているので、専門家に自由回答形式の質問をします。
このアプローチはまったく実行可能ですか? 各ステップで丸めを行うと、実行時間の長い計算で重大なエラー累積の問題が発生する可能性はありますか? それを避けるために丸めを行う特定の方法はありますか? そのように扱うことができない特別な値はありますか (サブノーマルが思い浮かびます)。
理想的には、float がネイティブの 61 ビット double と同じように動作するようにしたいと考えています。