首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用std::acos从std::cos(角)恢复精确的角度

使用std::acos从std::cos(角)恢复精确的角度
EN

Stack Overflow用户
提问于 2016-10-15 15:50:54
回答 4查看 646关注 0票数 3

C++标准是否保证angle == std::acos(std::cos(angle)) (如果angle在0,Pi范围内),或者换句话说,是否有可能在给定所述范围限制的情况下,从std::cos的结果中恢复angle的确切原始值?

忽略了angleinfinityNaN的边缘情况。

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2016-10-15 15:54:39

StoryTeller的回答:

标准不能保证这一点,仅仅因为std::cos的结果可能不能精确地由double表示,因此您将得到一个截断错误,这将影响std::acos的结果。

票数 3
EN

Stack Overflow用户

发布于 2016-10-15 16:15:04

来自cppreference.com:

如果没有出现错误,将返回arg的弧余弦(arccos(arg))在0;π范围内。

以度为单位,这是0到180,包括在内,对应于余弦值1向下到-1,包括在内。

在这个范围之外,你甚至无法得到一个近似的通信。计算余弦会丢弃关于你在这个范围之外的角度的信息。没有办法把这些信息拿回来。

如何丢弃信息:

首先,对于任意整数K,cos(x) = cos(K*360 + x),其次,cos(x) = cos(-x)。这将产生大量的角值,产生相同的余弦值。

而且,尽管所有读者都可能知道这一点,但为了完整起见:因为正弦曲线是非常无理数,一般不是简单的分数,所以除了余弦1,它对应于0度,你也不能期望得到精确的结果。

票数 3
EN

Stack Overflow用户

发布于 2016-10-15 16:21:06

根据标准:

本国际标准不对浮点运算的准确性提出任何要求;另见18.3.2。-尾注]

http://open-std.org/JTC1/SC22/WG21/docs/papers/2016/n4606.pdf

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/40061120

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档