2

このhttp://en.wikibooks.org/wiki/Ada_Programming/Types/deltaを読ん で、の制限値​​が何であるか疑問に思いましたdelta

例えば

delta 127 range 0..1_000_000;

デルタ値を保持するには1バイトが必要です。

だが

delta 0.0000000001 range 0..1;

もっとバイトが必要ですよね?

では、デルタに制限はありますか?確かに、私たちは無期限に小さな増分に進むことはできませんか?

上記のリンクでは、

コンパイラーが固定小数点型の定義を受け入れる場合、その型によって表される値が少なくとも指定された精度(またはそれ以上)を持つことを保証します。コンパイラが型定義をサポートできない場合(たとえば、ハードウェアが制限されているため)、コンパイル時エラーが発生します。

4

1 に答える 1

3

Deltaコンパイルされたコードはどこにも値を保持しません。格納されているタイプの値はスケーリングされるため、必要なサイズは範囲を(で割った値に対応します( 2の累乗でないSmall場合は、と同じになるように指定する必要があることに注意してください)。DeltaSmallDelta

GNATの場合、サポートされる最小値は、であり、次のタイプのオブジェクトにはDelta最大値があることがわかります。MacOS X(Intel)では、Size

Small_Delta : constant := 2.0 ** (-127);
Small_Bound : constant := 2.0 ** (-64);
type T1 is delta Small_Delta range -Small_Bound .. Small_Bound;

で失敗する

"T1'Small" too small, minimum allowed is 2.0**(-80)

Larger_Delta : constant := 2.0 ** (-64);
Larger_Bound : constant := 2.0;
type T2 is delta Larger_Delta range -Larger_Bound .. Larger_Bound;

で失敗する

size required (67) for type "T2" too large, maximum allowed is 64

(なぜ65ではなく67なのかわかりません!)

于 2013-03-12T07:25:03.797 に答える