C++ std::sqrt在c++;当数字变大时减速?

C++ std::sqrt在c++;当数字变大时减速?,c++,c++11,C++,C++11,我正在实现自己的数学库,目前我需要规范化向量和四元数 性能将成为我的一个大问题,因此我一直在想,因为我的数字可能会扩展到相当高的极限,C++中的 STD::SqRt/Cuff>函数随着数字的大小增加而越来越慢,还是总是在相同的时间内执行? 这个问题与C++11中的性能特别相关。对于肉眼而言,它的编号是。。或者我会说差别很小 如果您担心自己的实施,我将建议您实施 Babylonian Method for Square Root --> it is much faster then ot

我正在实现自己的数学库,目前我需要规范化向量和四元数

性能将成为我的一个大问题,因此我一直在想,因为我的数字可能会扩展到相当高的极限,C++中的 STD::SqRt/Cuff>函数随着数字的大小增加而越来越慢,还是总是在相同的时间内执行?


这个问题与C++11中的性能特别相关。

对于肉眼而言,它的编号是。。或者我会说差别很小

如果您担心自己的实施,我将建议您实施

 Babylonian Method for Square Root  --> it is much faster then others.. 

Babyonian的其他链接很少


对于肉眼而言,其编号为。。或者我会说差别很小

如果您担心自己的实施,我将建议您实施

 Babylonian Method for Square Root  --> it is much faster then others.. 

Babyonian的其他链接很少


对于肉眼而言,其编号为。。或者我会说差别很小

如果您担心自己的实施,我将建议您实施

 Babylonian Method for Square Root  --> it is much faster then others.. 

Babyonian的其他链接很少


对于肉眼而言,其编号为。。或者我会说差别很小

如果您担心自己的实施,我将建议您实施

 Babylonian Method for Square Root  --> it is much faster then others.. 

Babyonian的其他链接很少

实际上,没有

现代系统中的浮点数表示为符号、指数和尾数。这里的符号必须是0,这很简单。取两个数字,
x
4*x
。它们表示法的唯一区别是第二个的指数高出2。(除非在极限范围内,
4*x
可能是
+INF
,但我们忽略它。)

现在
sqrt(4*x)==2*sqrt(x)
我们在这里看到结果的指数高一点,但尾数是相同的

这意味着计算平方根所需的时间并不明显取决于数字的指数。您只需在固定时间内计算出
4^n
。sqrt(x)的难点在于计算结果的尾数,这取决于两件事:输入的尾数和输入指数是否为奇数

现代系统中的浮点数表示为符号、指数和尾数。这里的符号必须是0,这很简单。取两个数字,
x
4*x
。它们表示法的唯一区别是第二个的指数高出2。(除非在极限范围内,
4*x
可能是
+INF
,但我们忽略它。)

现在
sqrt(4*x)==2*sqrt(x)
我们在这里看到结果的指数高一点,但尾数是相同的

这意味着计算平方根所需的时间并不明显取决于数字的指数。您只需在固定时间内计算出
4^n
。sqrt(x)的难点在于计算结果的尾数,这取决于两件事:输入的尾数和输入指数是否为奇数

现代系统中的浮点数表示为符号、指数和尾数。这里的符号必须是0,这很简单。取两个数字,
x
4*x
。它们表示法的唯一区别是第二个的指数高出2。(除非在极限范围内,
4*x
可能是
+INF
,但我们忽略它。)

现在
sqrt(4*x)==2*sqrt(x)
我们在这里看到结果的指数高一点,但尾数是相同的

这意味着计算平方根所需的时间并不明显取决于数字的指数。您只需在固定时间内计算出
4^n
。sqrt(x)的难点在于计算结果的尾数,这取决于两件事:输入的尾数和输入指数是否为奇数

现代系统中的浮点数表示为符号、指数和尾数。这里的符号必须是0,这很简单。取两个数字,
x
4*x
。它们表示法的唯一区别是第二个的指数高出2。(除非在极限范围内,
4*x
可能是
+INF
,但我们忽略它。)

现在
sqrt(4*x)==2*sqrt(x)
我们在这里看到结果的指数高一点,但尾数是相同的


这意味着计算平方根所需的时间并不明显取决于数字的指数。您只需在固定时间内计算出
4^n
sqrt(x)
的难点在于计算结果的尾数,这取决于两件事:输入的尾数和输入指数是否为奇数。

C++也不提供任何保证。最好的策略不是假设性能,而是通过在实际输入上分析代码来衡量性能。测试它。我预计时间上不会有太大的差异,但这是可能的。此外,任何差异可能都不会与输入值的增加单调相关。相反,如果存在任何差异,则可能是处理速度较慢或较快的值在整个范围内“随机”分散。可能是由于不同类型的值的性能不同,例如非规范化浮点平均比规范化浮点慢。这是有道理的,我会这样做,完成后将结果发布到这里。没有明显的差异。@TNA:对于(非常)小的数,所需的时间实际上更大。对于x。例如,sqrt(1/4)=1/2。现在