2014-01-20 112 views
1

說,我有沒有C預處理器處理浮點數學常數

#define A 23.9318; 
    #define B 0.330043; 
    #define C 5.220628; 

我想做

const unsigned result = (unsigned)(0x01000000 * (A * B/C)); // unsigned is 32 bit 

我希望的是有一個與浮點的固定十進制表示結果計算。

我不能預先組合A,B,C在一起,因爲他們的定義不是我的代碼的一部分,我需要 它工作,如果他們改變。

+5

在大多數情況下,用分號結束'#define'不是一個好主意。 – alk

+0

是的你是對的。代碼中沒有這種方式。大部分我都在問結果的精確度。 C預處理器是否將A B C部分以浮動方式完成,直到演員陣容。 –

+0

預處理器將簡單地用'23.9318;'和'B'替換'A' ......等等。 – alk

回答

2

不,標準C預處理器操作不執行浮點運算。

C編譯器允許C編譯器在編譯時執行這些操作,但不是必需的。

1

這是不被提供作爲另一個答案,只是一個說明,將不適合進入留言...

在C99編譯器,用下面的代碼,我得到的結果如下(評論):

#include <ansi_c.h> 

#define A 23.9318 
#define B 0.330043 
#define C 5.220628 

#define result A*B/C //1.512945007267325 

const unsigned resultB = (unsigned)result*(0x01000000); 

int main(void) 
{ 
    resultB; //24394701 

    return 0; 
} 

所以,雖然不是必需的,但是一些C實現包括浮點的編譯時計算。

+0

是的,這是我想要的。我想我只是做一些測試代碼,並得到正確的答案,我將與它一起運行,無論誰在做浮點部分。謝謝 –

+0

我很驚訝minGW不做編譯時計算。它在許多其他功能中是相當先進的...(例如,開關語句的範圍情況等)祝你好運 – ryyker