C 奇怪的浮点取整

C 奇怪的浮点取整,c,floating-point,atmega,C,Floating Point,Atmega,我正在为微控制器atmega168(8位)编程 我想做一些类似的事情: float A = cos(- (2/3) * M_PI); 当然包括math.h(#define M#u PI 3.14159265358979323846) 结果,我得到的不是-0.5,而是1 我使用与pc的串行通信检查结果,我确信这也适用于浮点数,因为如果我设置 A= -0.50; 我收到了正确的结果 另外,我不能使用double…也因为我不明白这样做的原因 请帮帮我 2/3使用整数算法进行计算。它的计算结果为0

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

我想做一些类似的事情:

float A =  cos(- (2/3) * M_PI);
当然包括math.h(#define M#u PI 3.14159265358979323846)

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

我使用与pc的串行通信检查结果,我确信这也适用于浮点数,因为如果我设置

A= -0.50;
我收到了正确的结果

另外,我不能使用double…也因为我不明白这样做的原因


请帮帮我

2/3
使用整数算法进行计算。它的计算结果为0。你的意思是使用浮点除法

float A = cos(-(2.0/3.0) * M_PI);
如果需要
float
文字,请使用
f
后缀:

float A = cos(-(2.0f/3.0f) * M_PI);
但是请注意,此处展开的
M_PI
宏是一个双文本。这就是你想要的吗


我想真正的代码看起来不像这样。如果这真的是您的代码,那么您将编写
float A=-0.5f
并继续。我想真正的代码是有变量的。

你需要多少精度,数字从哪里来?如果您的目标是计算120度的余弦,只需将
a
设置为0.5即可。如果原始数字不表示为弧度,并且不需要绝对精确的结果,则基于表格的近似值可能比内置的trig函数更有用,因为您可以在表格大小、执行速度和精度之间找到最适合您需要的平衡。还请注意,如果原始数字是整数,则可以在不使用任何浮点值的情况下计算trig函数[例如,一个函数可以接受0-65535之间的角度,并返回-16384到+16384之间的值]。整数运算通常比浮点运算快得多,因此这样一个函数可能是一个重要的性能胜利。

表达式
2/3
是一个整数除法,即使整个表达式被指定为
浮点运算,也会产生
0
。试试
(2.0/3.0)