В общем, нет.
Есть две проблемы:
Является ли wp с более высокой точностью чем dl? Это зависит от компилятора и платформы.
Улучшается ли численный результат за счет увеличения точности чисел с плавающей запятой? В некоторых случаях точность ограничена алгоритмом или данными, и вы ничего не получите от этого, кроме более медленной программы.
В качестве первого диагноза в любом случае выполните
write(*,*) 'dl =', dl
write(*,*) 'wp =', wp
, чтобы увидеть, являются ли виды на самом деле одинаковыми.
Затем вы можете получить некоторую информацию о видах:
real(kind=dl) :: dl_number
real(kind=wp) :: wp_number
write(*,*) 'epsilon for dl number', epsilon(dl_number)
write(*,*) 'precision for dl number', precision(dl_number)
write(*,*) 'epsilon for wp number', epsilon(wp_number)
write(*,*) 'precision for wp number', precision(wp_number)
epsilon
возвращает наименьшее представимое число для вида и precision
десятичная точность.
В любом случае вы должны иметь представление о том, какая точность требуется для ваших вычислений, и исходя из этого.
Как указывает Альберт и Ян Бу sh, в коде есть много других мест, где вам нужно проверить проблему числового представления.
- Буквальные константы нуждаются в особом уходе. Например,
1.0/3.0
и 1._wp/3._wp
имеют существенно разные значения. - Некоторые функции также возвращают реальное значение по умолчанию (т.е. одинарную точность), если не требуется, например,
real
intrinsi c. - ...