10浮点数二分
感谢up主溶金落梧桐(uid:40733116),我是看了他的视频后总结的。
因为精度问题不太可能考,但还是要了解
例题-蓝桥1542
import java.util.Scanner;
import java.lang.Math;public class Main {static int n,m;public static void main(String[] args) {solve();}//判断x的m次方public static boolean check(double x){double ans = Math.pow(x,m);return ans <= n;}public static void solve(){//输入两个数Scanner sc = new Scanner(System.in);n = sc.nextInt();m = sc.nextInt();//二分double l = 1, r = n;double eps = 1e-9;while(l + eps < r){double mid = (l + r) / 2;//不要使用位运算if(check(mid)){//l和r都不要加一减一,因为对于浮点数来说,波动太大l = mid;}else{r = mid;}}String result = String.format("%.7f", l);System.out.println(result); }
}
注意和拓展
1.注意
注意:
1.浮点数二分不要加一减一,原因是波动太大了。
2.浮点数二分l和r可能会不相等,所以设置一个精度,一个很小的范围。
这个范围如果结果保留7位小数,该范围就是1e-9。保留n位小数,范围是1e-(n+2)。
3.浮点数二分就不要使用位运算计算mid,位运算主要是针对整数而言的。
2.拓展-java输出固定位小数的方法
使用String.format()方法double num = 3.14159;
String result = String.format("%.1f", num);
System.out.println(result); // 输出: 3.1
还有其它方法不展开了