写了一段代码,运行之后有疑问:
1.为什么测试5中,12.5和12运行效率相差那么大
2.提取方法后,效率为什么会低
3.调用提取的方法,测试5中浮点型得出的结论又不见了?
public class demo {
public static void main(String[] args) throws Exception {
//规律探测
test();
//浮点型参数测试
long l =0;
long time2 = System.currentTimeMillis();
//for(int i=1;i<500000;i++){
l += myAlj(1, 12.5, 200);
//}
System.out.println(l);
System.out.println(System.currentTimeMillis()-time2);
System.out.println("浮点-------------------------------------------");//循环写入方法:138,不写入:149ms
//整数方法测试
long time = System.currentTimeMillis();
long l2 =0;
//for(int i=1;i<500000;i++){
l2 += myAlj(1, 25, 200);
//}
System.out.println(l2);
System.out.println(System.currentTimeMillis()-time);//循环写入方法:278,不写入:298
System.out.println("整数-------------------------------------------");
}
private static void test() {
//-----------------------------测试一--------------------------------
long begin1=System.currentTimeMillis();
long j=0;
for(int i=1;i<500000;i++){
for(int i1=1;i1<=200;i1++){
j+=i1;
}
}
System.out.println(j);
System.out.println("测试一:"+(System.currentTimeMillis()-begin1));
System.out.println("-------------------------------------------");
//------------------------------测试二----------------------------------
long j1=0;
long begin2=System.currentTimeMillis();
for(int i=1;i<500000;i++){
for(int i1=1;i1<=100;i1++){
j1+=1*1+100*2*1;
}
}
System.out.println(j1);
System.out.println("测试二:"+(System.currentTimeMillis()-begin2));
System.out.println("-------------------------------------------");
//------------------------------测试三----------------------------------
long begin3=System.currentTimeMillis();
long j2=0;
for(int i=1;i<500000;i++){
for(int i1=1;i1<=50;i1++){
j2+=1*2+50*4*2;
}
}
System.out.println(j2);
System.out.println("测试三:"+(System.currentTimeMillis()-begin3));
System.out.println("-------------------------------------------");
// //------------------------------测试四---------------------------------
long begin4=System.currentTimeMillis();
long j3=0;
for(int i=1;i<500000;i++){
for(int i1=1;i1<=25;i1++){
j3+=4+25*8*4;//2,8,32 4,4
}
}
System.out.println(j3);
System.out.println("测试四:"+(System.currentTimeMillis()-begin4));
System.out.println("-------------------------------------------");
// //------------------------------测试五----------------------------------
long begin5=System.currentTimeMillis();
long j4=0;
for(int i=1;i<500000;i++){
for(int i1=1;i1<=13;i1++){
if(i1<=12){
//12.5=>12 耗时116ms=>14ms
j4+=8+12.5*16*8;//(1+n*f/n)*f/n/2
}else{
j4+=4+12.5*16*4;
}
}
}
System.out.println(j4);
System.out.println("测试五:"+(System.currentTimeMillis()-begin5));
System.out.println("-------------------------------------------");
}
//------------------------------提取方法-----------------------------------
/**
*
* @param arg1 起始数
* @param d
* @param f 结尾数
* @return
* @throws Exception
*/
public static long myAlj(int arg1,double d,int f) throws Exception{
//浮点数
long a=0;
long sum=0;
int temp2=(int)d+1;
for(int i=1;i<500000;i++){
if(Math.floor(d)!=d){
for(int i1=arg1;i1<=temp2;i1++){
int temp=(int)d;
if(i1<=temp){
//sum+=(arg1+arg2*f/arg2);//(arg1+arg2*f/arg2)*f/arg2/2
//(arg1+f)*f/arg2/2
sum+=(arg1+f)*f/d/2;
//a++;
}else{
sum+=((arg1+f)*f/d/2)*(d-temp);
//a++;
}
}
//return sum;
}else{
//for(int i=1;i