Уважаемые энтузиасты Ады,
type Long_Money_Type is delta 10.0**(-22) digits 38;
На первой машине Ubuntu Linux 64 бит GNAT 8.3.0 это работает.
На второй машине Alpine Linux 64 Bit GNAT 10.3.1 20211027 я получаю эту ошибку:
adx-lib-money.ads:14:29: scale exceeds maximum value of 18
adx-lib-money.ads:14:54: digits value out of range, maximum is 18
Есть ли способ изменить максимальное значение?
Эта проблема не возникает в GCC 11 и более поздних версиях, поэтому, похоже, вам нужно обновиться.
Может ли это быть связано с введением 128-битных целых чисел в GNAT, которое произошло всего несколько лет назад?
Расширяя ответ @Simon Wright , стандарт Ada определяет определенные характеристики, определяемые реализацией, таким образом, что «допускает определенные машинные зависимости контролируемым образом». В частности,
Какие комбинации малого, диапазона и цифр поддерживаются для типов с фиксированной точкой. См. 3.5.9(10).
В качестве конкретного примера Справочное руководство GNAT 12.2 отвечает следующим образом:
Для десятичного типа с фиксированной запятой на 32-битных платформах младшая должна лежать в 1.0E-18 .. 1.0E+18, а цифры в 1 .. 18. На 64-битных платформах младшая должна лежать в 1.0E -38 .. 1.0E+38 и цифры в 1 .. 38.
В результате при поиске подходящего обновления убедитесь, что вы выбрали 64-разрядную версию, если обе доступны.
спасибо Саймон Райт GNAT 13.1.1 20230722 работает..