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

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

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

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

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


person Andrew    schedule 09.05.2012    source источник


Ответы (3)


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

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

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

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

и

Оператор «real * 8» определяет имена переменных как 8-байтовые действительные числа двойной точности, которые имеют 15-значную точность и диапазон значений 10 от -308 до +308. Оператор «двойной точности» аналогичен оператору «real * 8» почти на всех 32-разрядных компьютерах.

person Jon Skeet    schedule 09.05.2012
comment
-1 за то, что Джон Скит ответил на вопрос Fortran, цитируя архаичную и вводящую в заблуждение ссылку. Другие ответы на этот вопрос демонстрируют лучшее понимание современного Фортрана. - person High Performance Mark; 24.05.2013
comment
@HighPerformanceMark: Может быть, вы могли бы дать мне более полезную ссылку, на которую я мог бы перейти? Я, конечно, не собираюсь утверждать, что я хоть немного разбираюсь в Фортране, но является ли суть ответа (что 8 представляет собой количество байтов) на самом деле неверной или вводящей в заблуждение? - person Jon Skeet; 24.05.2013

Теперь существует как минимум 4 способа указать точность в Фортране.

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

Новый способ - с «видами». Следует использовать внутренние функции, чтобы получить тот вид, который имеет нужную вам точность. Указание типа с помощью определенного числового значения рискованно, поскольку разные компиляторы используют разные значения.

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

person M. S. B.    schedule 09.05.2012
comment
ОБНОВЛЕНИЕ: расширение Fortran 2008 для модуля среды ISO теперь более широко поддерживается. Итак, если вы use ISO_FORTRAN_ENV, у вас будет доступ к значениям типа, которые определяют действительные и целочисленные типы по количеству бит (например, real (real32) :: и real (real64) ::) в качестве стандартного и переносимого способа определения типов по размеру хранилища. - person M. S. B.; 26.05.2013

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

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

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

person Hristo Iliev    schedule 09.05.2012