Установите реальный тип по умолчанию на 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, чтобы скомпилировать «двойной» как «длинный двойной»?