奇怪的浮动舍入

0 c floating-point atmega

我正在编程微控制器atmega168(8位).

我想做的事情如下:

float A =  cos(- (2/3) * M_PI);
Run Code Online (Sandbox Code Playgroud)

当然包括math.h(#define M_PI 3.14159265358979323846)

结果,而不是-0.5,我得到1.

我使用串行通信检查结果到我的电脑,我确信它也适用于浮点数,因为如果我设置

A= -0.50;
Run Code Online (Sandbox Code Playgroud)

我收到了正确的结果.

PS.我不能使用双...也因为我没有看到这样做的原因

请帮帮我!

Dav*_*nan 6

2/3使用整数运算来评估.它的计算结果为0.你的意思是使用浮点除法

float A = cos(-(2.0/3.0) * M_PI);
Run Code Online (Sandbox Code Playgroud)

如果你想要float文字使用f后缀:

float A = cos(-(2.0f/3.0f) * M_PI);
Run Code Online (Sandbox Code Playgroud)

但请注意,M_PI此处展开的宏是双字面值.那是你要的吗?

我认为真正的代码看起来不像这样.如果这真的是你的代码,那么你会写下float A = -0.5f并继续前进.我猜真正的代码有变量.