double 到 int 的转换在 c 中使用 math.h 函数不起作用

double to int conversion not working using math.h functions in c

dataBuf[1] = acos(0.130f);

这是我的代码 运行 但是当我打印出结果时,它显示为 1 而不是 82。dataBuf 是一个 int16_t 数组。所有其他 math.h 函数都可以很好地进行转换,但三角函数不起作用。

math.h 中的三角函数使用弧度,而不是度数。您可以通过乘以 180 / pi, ( 57.29577951308232).

将弧度转换为度数

acos(0.13) 将 return 1.440427347091751 弧度乘以 57.29577951308232 得到 82.53040768358306 度的结果。

OP 期待以度为单位的结果,但 acos() returns 以弧度为单位的结果也由 @Antti Haapala 解释。

此外,OP 代码经历 int 截断而不是舍入。示例:尝试计算 90 度的结果时。 acos(0) --> 1.570796...。当此值转换为度数时,结果可能会小于 90.0,如 89.999999999...。当这被转换为 int16_t 时,结果被截断为 89 而不是 90 所希望的。在转换为整数之前,最好对浮点值进行舍入

dataBuf[1] = (int16_t) round(acos(0.130f) * 180/M_PI);`
// or using float functions
const float r2d = 180/M_PI;
dataBuf[1] = (int16_t) roundf(acosf(0.130f) * r2d);`