C 设置FLT_EVAL_方法不起作用

C 设置FLT_EVAL_方法不起作用,c,floating-point,C,Floating Point,但实际产出是: #include <stdio.h> #include <float.h> #ifdef FLT_EVAL_METHOD #undef FLT_EVAL_METHOD #define FLT_EVAL_METHOD 1 #else #define FLT_EVAL_METHOD 1 #endif int main(void) { printf("%f\n%f\n", FLT_MAX, DBL_MAX); floa

但实际产出是:

#include <stdio.h>
#include <float.h>

#ifdef FLT_EVAL_METHOD
    #undef FLT_EVAL_METHOD
    #define FLT_EVAL_METHOD 1
#else
    #define FLT_EVAL_METHOD 1
#endif

int main(void)
{
    printf("%f\n%f\n", FLT_MAX, DBL_MAX);
    float fp = FLT_MAX;
    printf("%f\n", fp + 1);
    printf("%f\n", FLT_MAX + 1);
    printf("%f\n", (float) FLT_MAX + 1);
}
340282346638528859811704183484516925440.000000
179769313486231570814527423731704356798070567525844996598917476803157260780028538760589558632766878171540458953514382464234321326889464182768467546703537516986049910576551282076245490090389328944075868508455133942304583236903222948165808559332123348274797826204144723168738177180919299881250404026184124858368.000000
340282346638528859811704183484516925441.000000
340282346638528859811704183484516925441.000000
340282346638528859811704183484516925441.000000

既然
FLT\u EVAL\u METHOD
设置为1,那么所有
float
表达式不都应该作为
double
s计算吗?“将浮点和双精度计算为双精度,将长精度计算为长精度”是什么意思?
float
s是否与
double
s相同?

FLT\u EVAL\u方法
不是程序员用来控制编译器的开关。它是编译器/平台向程序员报告如何计算浮点表达式的一种方法。您不应该更改它的值,这样做也不会对任何事情产生任何影响。

为什么您认为您可以修改
FLT\u EVAL\u方法
?注意:某些编译器设置将影响
FLT\u EVAL\u方法
-显然依赖于编译器。
340282346638528859811704183484516925440.000000
179769313486231570814527423731704356798070567525844996598917476803157260780028538760589558632766878171540458953514382464234321326889464182768467546703537516986049910576551282076245490090389328944075868508455133942304583236903222948165808559332123348274797826204144723168738177180919299881250404026184124858368.000000
340282346638528859811704183484516925440.000000
340282346638528859811704183484516925440.000000
340282346638528859811704183484516925440.000000