簡體   English   中英

設置FLT_EVAL_METHOD不起作用

[英]Setting FLT_EVAL_METHOD not working

#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

但實際輸出是:

340282346638528859811704183484516925440.000000
179769313486231570814527423731704356798070567525844996598917476803157260780028538760589558632766878171540458953514382464234321326889464182768467546703537516986049910576551282076245490090389328944075868508455133942304583236903222948165808559332123348274797826204144723168738177180919299881250404026184124858368.000000
340282346638528859811704183484516925440.000000
340282346638528859811704183484516925440.000000
340282346638528859811704183484516925440.000000

由於FLT_EVAL_METHOD設置為1,所以不應將所有float表達式計算為double s嗎? 什么“評價浮動和加倍為雙倍,長加倍為雙倍。” 意思? float處理是否與double s相同?

FLT_EVAL_METHOD不是程序員用來控制編譯器的開關。 它是編譯器/平台向程序員報告如何評估浮點表達式的一種手段。 你不應該改變它的價值,這樣做不應該對任何事情產生任何影響。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM