【发布时间】:2014-10-01 06:44:42
【问题描述】:
我正在实现自己的数学库,目前我需要标准化向量和四元数。
性能对我来说将是一个大问题,因此我一直想知道,因为我的数字可能会扩展到相当高的限制,C++ 中的std::sqrt 函数是否会随着数字的大小而变得越来越慢增加还是总是在相同的时间内执行?
这个问题专门与 C++11 中的性能有关。
【问题讨论】:
-
C++ 不提供任何保证。最好的策略是通过根据实际输入分析您的代码来衡量性能,而不是对性能进行假设。
-
测试一下。我预计时间不会有太大差异,但这是可能的。此外,任何差异都可能不会与输入值的增加单调相关。相反,如果有任何差异,则可能是处理速度较慢或速度较快的值“随机”分散在整个范围内。也许不同类别的值之间的性能不同,例如非规范化浮点数平均比规范化浮点数慢。
-
有道理,我会这样做,完成后将结果发布在这里。
-
没有明显区别。
-
@TNA:对于(非常)小的数字,所需的时间实际上更长。对于 x x。例如。 sqrt(1/4) = 1/2。现在如果 x 是非正规的,那么 sqrt(x) 是一个常规数字 >0 。这不能优化为 0。所以实际上你会期望 sqrt(x) 对 small 数字变慢,而不是很大。