двойная точность в аде? - PullRequest
7 голосов
/ 20 апреля 2010

Я очень новичок в Аде и пытался увидеть, предлагает ли он тип двойной точности.Я вижу, что у нас есть float и

Put( Integer'Image( Float'digits ) );

на моей машине дает значение 6, что недостаточно для численных вычислений.?

Большое спасибо ...

Ответы [ 2 ]

7 голосов
/ 20 апреля 2010

Это немного сложнее, чем это.

Единственный предопределенный тип с плавающей точкой, который компиляторы должны поддерживать , - Float. Компиляторы могут дополнительно поддерживать Short_Float и Long_Float. Вы должны иметь возможность заглянуть в appendex F документации вашего компилятора, чтобы увидеть, что он поддерживает.

На практике ваш компилятор почти наверняка определяет Float как 32-разрядное значение IEEE с плавающей запятой и Long_Float как 64-разрядное. Обратите внимание, что C в значительной степени работает так же со своими float и double. C на самом деле не определяет их размер.

Если вы абсолютно должны иметь определенную точность (например, вы делитесь данными с чем-то внешним, которое должно использовать IEEE 64-bit), то вам, вероятно, следует определить свой собственный тип float именно с такой точностью , Это обеспечит перенос вашего кода на любую платформу или компилятор, на который вы его перенесете, или на то, что он выдаст ошибку компилятора, чтобы вы могли исправить проблему.

6 голосов
/ 21 апреля 2010

Вы можете создать плавающий размер любого размера. В течение долгого времени это будет:

type My_Long_Float is digits 11;

Wiki Books - хороший справочник для подобных вещей.

...