двойная точность в Ada?

Я очень плохо знаком с Ada и пытался видеть, предлагает ли это тип двойной точности. Я вижу, что у нас есть плавание и

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

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

У Ada есть двойные и длинные двойные типы как в C?

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

7
задан yCalleecharan 20 April 2010 в 19:43
поделиться

2 ответа

Это немного сложнее.

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

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

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

7
ответ дан 6 December 2019 в 19:34
поделиться

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

type My_Long_Float is digits 11;

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

6
ответ дан 6 December 2019 в 19:34
поделиться
Другие вопросы по тегам:

Похожие вопросы: