Что DATA INF / 1.D + 300 / означает в Фортране? - PullRequest
3 голосов
/ 23 февраля 2010

Я перевожу некоторый фортран в наше приложение на C # и пытаюсь выяснить, что означает немного фортрана в верхней части функции.

  DOUBLE PRECISION INF, DMIN, D12

  DATA INF/1.D+300/

Каким будет значение INF?

Ответы [ 4 ]

4 голосов
/ 23 февраля 2010

D означает «& times; 10 ??? » , или широко известный как e в 1.e+300 в C #, но это для двойной точности.

Оператор DOUBLE PRECISION просто определяет 3 переменные типа double.

Заявление DATA

DATA X/Y/

переводится как

X = Y;

в C #. Следовательно, вы получите

double INF = 1.e+300, DMIN, D12;

Поскольку INF настолько велико, я считаю, что это означает "Бесконечность", в этом случае лучше использовать настоящую бесконечность IEEE (double INF = double.PositiveInfinity, ...).

2 голосов
/ 23 февраля 2010

Код выполнен в стиле FORTRAN IV или FORTRAN 77, а не Fortran 90/95/2003.

Double Precision объявляет, что переменные удваивают точность обычного действительного числа. Я не уверен, что стандарты FORTRAN той эпохи были предельно точны в том, что это означало, поскольку тогда существовало большее разнообразие числового оборудования. Сегодня он практически всегда получит 8-байтовый реал. Оператор Data инициализирует переменную INF. Использование «D» в константе «1.D + 300» вместо E является старым FORTRAN для указания, что константа имеет двойную точность.

Способ Фортрана (> = 90) получения наибольшего положительного двойного значения:

INF = огромный (1,0D + 0)

2 голосов
/ 23 февраля 2010

Код объявляет константу с именем INF (т.е. бесконечность) со значением 10 ^ 300. Вы хотели бы заменить double.PositiveInfinity или double.MaxValue.

1 голос
/ 23 февраля 2010

Значение будет 1.0e300, но я уверен, что предполагается, что оно будет установлено в наибольшее двойное значение, которое может быть выражено на текущем процессоре.поэтому в C # это будет double.PositiveInfinity, а не какое-то жестко закодированное значение.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...