1

これは 8 ビット アーキテクチャで、ワード サイズは 16 ビットです。ここで、48 ビット整数変数を使用する必要があります。私の理解では、libm は 8、16、32、64 ビット演算 (加算、乗算、符号付きおよび符号なし) を実装しています。

したがって、計算を行うには、値を 64 ビットの符号付きまたは符号なし整数で格納する必要があります。正しい?

もしそうなら、一般的なルーチンが使用されるのを防ぐために何がありますか? たとえば、追加の場合:

  1. 両方の変数の LSB から開始
  2. それらを追加します
  3. より多くのバイトが利用可能な場合は続行し、そうでない場合は準備完了
  4. 両方の変数を 1 バイト右にシフトします
  5. 後藤 1)
4

2 に答える 2

3

libm は標準サイズの型のルーチンを実装し、コンパイラは式に使用する適切なルーチンを選択します。

独自の型を実装したい場合は、実装できます。通常の演算子を使用する場合は、コンパイル プロセスに入って、コンパイラに自分の演算子を選択させる必要があります。

たとえば、操作を関数として実装できますがadd(int48_t, int48_t)、コンパイラは定数の折りたたみなどの最適化を行うことができません。

したがって、独自のカスタム コンパイラを実装することを妨げるものは何もありませんが、それは本当に必要なのでしょうか? 本当にそのスペースを節約する必要がありますか? もしそうなら、それのために行きます!

于 2013-03-05T01:51:01.750 に答える
2

その通りです。数ビットを節約することは (ほとんどの場合)、独自のロジックを実装する手間に見合うものではありません。

于 2013-03-04T09:13:35.530 に答える