Установите реальный тип по умолчанию на 16 байт в программе c

В компиляторе gfortran флаг -fdefault-real-16 помогает установить реальный тип по умолчанию на тип шириной 16 байт. Например

      program qp_test
implicit none 
      double precision  :: a    
      a  = 123456789012345678.123456789012345678
      write(*,'(a,g41.36)') 'my a    = ',a
      write(*,'(a)')        'exact a = 123456789012345678.123456789012345678'
end program 

Когда соблюдается как

      gfortran qp_test.f90

Результат выглядит так

      my a    = 123456790519087104.000000000000000000    
exact a = 123456789012345678.123456789012345678 

И когда компилируется как

      gfortran qp_test.f90 -fdefault-real-16

Результат выглядит так

      my a    = 123456789012345678.123456789012345677    
exact a = 123456789012345678.123456789012345678 

Итак, я попытался сделать то же самое с программой c

      #include<stdio.h>
#include<string.h>
int main() {
   double a;
   a  = 123456789012345678.123456789012345678;           
   printf("my a    = %36.18f\n", a);
   printf("exact a = 123456789012345678.123456789012345678\n");
   return 0;
}

Проблема в том, что даже программа c скомпилирована с флагом -m64, например

      gcc qp_test.c -o qp_test_c -m64

Это дает тот же результат

      my a    = 123456789012345680.000000000000000000
exact a = 123456789012345678.123456789012345678

Вопрос в следующем: есть ли способ сказать gcc, чтобы скомпилировать «двойной» как «длинный двойной»?

0 ответов

Другие вопросы по тегам