Я очень плохо знаком с Ada и пытался видеть, предлагает ли это тип двойной точности. Я вижу, что у нас есть плавание и
Put( Integer'Image( Float'digits ) );
на моей машине дает значение 6, который является недостаточно для числовых вычислений.
У Ada есть двойные и длинные двойные типы как в C?
Большое спасибо...
Это немного сложнее.
Единственный предопределенный тип с плавающей запятой, который компиляторы должны поддерживать , - это Float
. Компиляторы могут дополнительно поддерживать Short_Float
и Long_Float
. Вы должны иметь возможность заглянуть в приложение F документации вашего компилятора, чтобы узнать, что он поддерживает.
На практике ваш компилятор почти наверняка определяет Float
как 32-битное число с плавающей запятой IEEE, а Long_Float
как 64-битное. Обратите внимание, что C в значительной степени работает таким же образом со своими float
и double
. C на самом деле не определяет их размер.
Если вы абсолютно должны иметь определенную точность (например: вы делитесь данными с чем-то внешним, которое должно использовать 64-битный IEEE), то вам, вероятно, следует определить свой собственный тип с плавающей запятой с точно такой точностью. . Это обеспечит переносимость вашего кода на любую платформу или компилятор, на который вы его переместите, либо вызовет ошибку компилятора, чтобы вы могли исправить проблему.
Вы можете создать поплавок любого размера, который вам нравится. В течение долгого времени это было бы так:
type My_Long_Float is digits 11;
Wiki Books - хороший справочник для подобных вещей.