2014-01-20 81 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