Java 为什么第一个sqrt算法比第二个快?

Java 为什么第一个sqrt算法比第二个快?,java,algorithm,sqrt,jmh,Java,Algorithm,Sqrt,Jmh,我在测试一些平方根算法,直到我注意到第一种方法比第二种快 @基准测试 @Fork(值=1) @基准模式(模式吞吐量) 公共无效sqrt1(){ 整数=25=10; int c=0x8000; int g=0x8000; 如果(g*g>数量){ g^=c; } c>>=1; 如果(c==0){ 返回(g编号){ g^=c; } c>>=1; 如果(c==0){ 返回g=10; int c=0x8000; int g=0x8000; 对于(int i=0;i数量){ g^=c; } c>>=1; 如

我在测试一些平方根算法,直到我注意到第一种方法比第二种快

@基准测试
@Fork(值=1)
@基准模式(模式吞吐量)
公共无效sqrt1(){
整数=25=10;
int c=0x8000;
int g=0x8000;
如果(g*g>数量){
g^=c;
}
c>>=1;
如果(c==0){
返回(g编号){
g^=c;
}
c>>=1;
如果(c==0){
返回g=10;
int c=0x8000;
int g=0x8000;
对于(int i=0;i<16;i++){
如果(g*g>数量){
g^=c;
}
c>>=1;
如果(c==0){

返回g第一个循环15次。第二个循环16次。因此,你在第一个循环中做的增量和比较少了一个。我可以想象,如果你不使用循环就重复计算16次,速度会更快。但这只是一个预感。

fwiw,这几乎是一个丢失的知识点。平均m现代处理器这可能不会更快,也可能更慢!但对于没有硬件乘法器的旧的或小的(可能是嵌入式)处理器,这可能是一件大事。
Benchmark          Mode  Cnt          Score         Error  Units
Benchmarks.sqrt1  thrpt   20  104918275,263 ± 1080520,157  ops/s
Benchmarks.sqrt2  thrpt   20   93597198,803 ±  417763,363  ops/s