Я работаю с большим Fortran кода, который использует XLF компилятор для POWER7 Он использует эти флаги, чтобы установить точность до 64 бит: -qrealsize=8 -qintsize=8
Mixed точность присваивание
Однако недавно импортировала кусок кода имеет линии, подобные этим:
real :: var1d(nvol)
real :: var3d(ni,nj,nk)
var1d = var3d*1.0e6
Интересно, как XLF имеет дело с буквальным 1e6
? Основная проблема: это где эталонная версия и модифицированная версия отклоняются. 9-я и 10-я значащие цифры отличаются для var1d
.
Настойчиво это растет с итерациями.
Все реальные переменные и константы должны продвигаться флагом. У меня нет времени изучать руководство XLF (вы должны это сделать!), Но нормальные же компиляторы делают это. –
Если бы я был обеспокоен этой проблемой, я бы, вероятно, переписал литерал как «1.0d6» (или «1.0_real64» или какой-то эквивалент) и посмотрел, какое влияние это имеет. Конечно, вы, вероятно, скажете мне, что отклонения начинаются только после 100 000 вычислительных часов. –
Чтобы добавить к другим комментариям, '1e6' - это буквальная реальная константа типа по умолчанию. – francescalus