int denominator= 20; //分母
double j = 1;
int numerator = 1; //分子
double[] result = new double[21];
int[] numerator_result = new int[21];
while(denominator!=0){
//分母范围1~20,每个分母乘0.618,向上取整,向下取整,求距离0.618最近的分子值和距离,分别存入数组
j = denominator*0.618;
System.out.println("j:"+j);
//向上取整 向下取整
if(Math.ceil(j)-j > j-Math.floor(j)){
result[denominator]= j-Math.floor(j);
numerator_result[denominator]= (int)Math.floor(j);
}else{
result[denominator]= Math.ceil(j)-j;
numerator_result[denominator]= (int)Math.ceil(j);
}
System.out.println("result["+denominator+"]:"+result[denominator]);
denominator--;
}
double result_final=20;
int denominator_final=0;
int i=0;
//从距离结果中查找最小结果,及对应的分母值,再查找以分母值为下标对应的分子值
for(i=1;i<20;i++){
if(result[i]< result_final){
result_final= result[i];
denominator_final = i;
}
}
System.out.println("分母是:"+denominator_final);
System.out.println("分子是:"+numerator_result[denominator_final]);
System.out.println("最接近0.618的值为:"+result_final);
}
从1-20中找到距离0.618最近的分子和分母
最新推荐文章于 2025-05-28 15:51:16 发布