gcc
和cl
是否具有ifort
real-size编译器标志的等效标识?如果没有,我应该用什么呢? MACRO?
#ifdef DOUBLE_PRECISION
#define REAL double
#else
#define REAL float
#endif
REAL myvar;
答案 0 :(得分:1)
gfortran有编译时选项-fdefault-real-8
。但不是gcc。
答案 1 :(得分:0)
据我所知,没有“通用浮点数”,其大小可以通过编译器开关控制。我们使用与您类似的方法,虽然使用的是typedef
而不是define
:
#ifdef DOUBLE_PRECISION
typedef double real;
#else
typedef float real;
#endif
然而,它不仅仅是浮点类型。例如,请考虑以下函数签名:
double exp(double x);
float expf(float x);
long double expl(long double x);
每个函数都有一个后缀,表示参数类型和返回值。或者考虑浮点文字的类型:
1.2f // float
1.2 // double
如果你想要安全起见,你也必须为这些案例编写宏:
#ifdef DOUBLE_PRECISION
#define REAL(x) x
#define SIN(x) sin(x)
#else
#define REAL(x) x ## f
#define SIN(x) sinf(x)
#endif
在实践中,我发现在开启优化(-O2
或更多)的情况下,编译器可以找出最好的函数签名以及用于文字的类型,所以我只使用简单的函数和文字。为了不弄乱代码。这似乎适用于gcc以及Intel和PGI编译器。