Подтвердить что ты не робот

Что означает "реальный * 8"?

В руководстве программы, написанной на Fortran 90, говорится: "Все реальные переменные и параметры указаны в 64-битной точности (т.е. real*8)".

Согласно Wikipedia, одинарная точность соответствует 32-битной точности, тогда как двойная точность соответствует 64-битной точности, поэтому, по-видимому, программа использует двойную точность.

Но что означает real*8?

Я думал, что 8 означает, что 8 цифр следуют десятичной точке. Однако Wikipedia, кажется, говорит, что одиночная точность обычно составляет 6-9 цифр, тогда как double precision обычно составляет 15-17 цифр. Означает ли это, что утверждение "64-битная точность" не соответствует real*8?

4b9b3361

Ответ 1

Значение 8 относится к числу байтов, которые использует тип данных.

Таким образом, 32-битное целое число integer*4 по тем же строкам.

Быстрый поиск это руководство по типам данных Fortran, которое включает в себя:

Оператор "real * 4" указывает имена переменных как одноточечные 4-байтовые реальные числа, которые имеют 7 цифр точности и диапазон значений 10 от -38 до +38. "Реальное" утверждение такое же, как и оператор "real * 4" почти на всех 32-разрядных компьютерах.

и

Оператор "real * 8" указывает имена переменных, которые представляют собой двухзначные 8-байтовые реальные числа, которые имеют 15 цифр точности и диапазон амплитуд от 10 до 308. Операция "double precision" такая же, как и оператор "real * 8" почти на всех 32-разрядных компьютерах.

Ответ 2

В настоящее время существует не менее 4 способов указания точности в Fortran.

Как уже было сказано, real*8 указывает количество байтов. Он несколько устарел, но должен быть безопасным.

Новый способ - это "виды". Чтобы получить тот вид, который вам нужен, нужно использовать внутренние функции. Указание вида по конкретному числовому значению является рискованным, потому что разные компиляторы используют разные значения.

Еще один способ - использовать именованные типы ISO_C_Binding. Этот вопрос обсуждает систему добрых целых чисел - он очень похож на реал.

Ответ 3

Звездная нотация (как называется TYPE*n) является нестандартной конструкцией Fortran, если используется с TYPE, отличным от CHARACTER.

Если применяется к типу символа, он создает массив из n символов (или строку символов n).

Если применяется к другому типу, он задает размер хранилища в байтах. Этого следует избегать любой ценой в Fortran 90+, где вводится концепция типа KIND. Задание размера хранилища создает не переносные приложения.