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);`
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);`