Можно ли включить округление до нуля или округление до минус бесконечности в ifort?

У меня есть сценарий, в котором я хочу, чтобы компилятор округлил значения с плавающей запятой до нуля или до минус бесконечности. Это нужно сделать только с помощью параметров компилятора, и мне не удалось найти какие-либо параметры компилятора, касающиеся этого, поскольку аналогичный метод доступен для компилятора xlf для платформы AIX.

Есть ли способ сделать это в Linux с помощью компилятора ifort?


person arunr    schedule 26.11.2013    source источник


Ответы (2)


Параметры с плавающей запятой для компилятора Intel FORTRAN перечислены здесь. Я не вижу какой-либо опции, которая управляет режимом округления.

person Eric Postpischil    schedule 26.11.2013

Я не знаю, существует ли флаг минус бесконечности, но обнулить флаг, -ftz, похоже, это половина того, что вы хотите. Далее следует простой тест:

program testftz
   implicit none
   real :: x
   integer :: i

   x = 1.0
   do i=1,50
      print *,i,x
      x = x/10.0
   enddo
end program testftz

Компиляция этого без -ftz дает небольшое значение 1.4012985e-45 на 46-м шаге, прежде чем сбрасывать его до нуля. Его компиляция с -ftz дает небольшое значение 9.999999e-38 на 38-м шаге перед тем, как сбросить его до нуля.

person Kyle Kanos    schedule 26.11.2013
comment
Сброс до нуля — это «функция» (недостаток) некоторых процессоров, когда они изменяют субнормальные значения на ноль, чтобы компенсировать низкую производительность, которую они обеспечивают для правильной обработки субнормальных значений. Эта функция не влияет на округление в операциях, не связанных с субнормальными значениями, и это совсем не то, о чем просит вопрос. - person Eric Postpischil; 26.11.2013