所以我正在使用一些matlab代码手动转换为c代码。我只是想知道是否有一个等效于我在matlab代码中看到的sind和cosd函数的c。我想这会以度为单位返回答案而不是以弧度为单位给出结果的c sin和cos函数。我想我可以将结果乘以180 / pi,但只是想知道math.h中是否有库函数我没有看到。或者即使gsl库中有某些内容可以执行此操作。
答案 0 :(得分:9)
M_PI
的不精确性,H2CO3的解决方案将对大型参数造成灾难性的精度损失。任何参数的一般安全版本是:
#define sind(x) (sin(fmod((x),360) * M_PI / 180))
答案 1 :(得分:3)
不,C标准库中的三角函数都以弧度为单位。但是你可以轻松地使用宏或内联函数:
#define sind(x) (sin((x) * M_PI / 180))
或
inline double sind(double x)
{
return sin(x * M_PI / 180);
}
请注意,当您想要更改函数的返回值(所谓的反向或“arcus”函数)时,需要与转换相反:
inline double asind(double x)
{
return asin(x) / M_PI * 180;
}
答案 2 :(得分:1)
不,它们在C库中不可用。您只能在C库中找到弧度值参数或返回值。
答案 3 :(得分:1)
另外,请注意,sind和cosd等不以度为单位返回结果,它们以度为单位获取参数。 asind和acosd以度数返回结果。
答案 4 :(得分:0)
不在C库中。所有三角C库函数都将参数作为弧度值而非度数。正如您所说,您需要自己执行转换或使用专用库。