具有度数的 acos 和 cos 没有给出正确的结果

acos and cos with degrees not giving proper result

当我编写如下代码时

NSLog(@"%f",acos(cos(1)));


结果是 returns 1 但是如果我试图从度数而不是弧度获得结果然后面临如下问题

#define DEGREES_TO_RADIANS(angle) ((angle) / 180.0 * M_PI)
NSLog(@"%f",acos(cos(DEGREES_TO_RADIANS(1)))); 


然后returns0.017453而不是1
如果我像下面这样写

NSLog(@"%f",acos(cos(DEGREES_TO_RADIANS(1)))*180/M_PI);


然后我得到正确的 1 作为结果。
但是如果我像下面这样写

NSString *a1 = [NSString stringWithFormat:@"%f",(cos(DEGREES_TO_RADIANS(1)))];
NSString *a2 = [NSString stringWithFormat:@"%f",(acos([a1 doubleValue])*180/M_PI)];
NSLog(@"%f",[a2 doubleValue]);

然后我得到 0.998999 作为结果。
那么问题出在哪里呢?
请帮帮我

0.017453 大约是一度有多少弧度。

如果您希望日志行输出 1,您需要转换回度数。

#define RADIANS_TO_DEGREES(angle) ((angle) * 180.0 / M_PI)
NSLog(@"%f", RADIANS_TO_DEGREES(acos(cos(DEGREES_TO_RADIANS(1)))));

请注意,由于三角函数和一般浮点数的精度有限,您可能会得到类似 0.9999 的结果。

反余弦是余弦的倒数。

余弦以角度作为输入,returns取-1到1之间的值。 反余弦 (acos) 取一个从 -1 到 1 的值作为输入,returns 一个角度。

acos() 的输入不是角度,因此您不应尝试在度数和弧度之间进行转换。 结果是一个角度。这就是你转换的内容。

所以你会写

x = RADIANS_TO_DEGREES(acos(1)).

这将为您提供余弦为 1 的角度,以度数表示。 (acos(1)的值为0,无论是度数还是弧度都是一样的。)

最好使用acos(0)作为测试值。余弦函数 = 0 在 pi/2(或 90 度。)

所以

acos(0) == pi/2. (~1.5707)

RADIANS_TO_DEGREES(acos(0)) == 90.

编辑:

我现在看到在你的问题中你使用的是 acos(cos(DEGREES_TO_RADIANS(1)),这是正确的。

但是,如果您想要以度数为单位的答案,您仍然需要将 acos() 的结果转换为度数,如上所述。 (而且凯文的回答也是正确的,我的错误)

请注意,cos(1) 在度数和弧度方面都有点奇怪。这两者都不会给出一个公平的答案。

cos(0) = 1,cos(pi) = -1,cos(2pi) = 1。 (或度数) cos(180) = -1, cos(360) = 1)

以度为单位的 cos(1) 将是一个奇怪的十进制值,以弧度为单位的 cos(1) 也是如此。