求一个数的算术平方根Java实现(误差 小于0.00001)
思路:
二分查找 时间复杂度:logN
注意点:
1 做好校验,2小数处理
代码如下:
1
package com.secbro.test;
public class Sqrt {
public static void main(String[] args) {
for (double i = 1; i <= 100; i++) {
Double a = binSearchSqrt(i, 1d, i);
System.out.println(i + "的平方根是:" + a);
}
}
private static double binSearchSqrt(Double num, Double left, Double right) {
if (num == null) {
throw new IllegalArgumentException("input invalid");
}
while (left < right) {
double middle = (left + right) / 2.0;
if (Math.abs(middle * middle - num) < 0.00001) {
return middle;
}
if (middle * middle < num ) {
left = middle;
right = num / middle;
} else if (middle * middle > num ) {
right = middle;
left = num / middle;
}
}
return left;
}
}
打印结果
1.0的平方根是:1.0
2.0的平方根是:1.414215087890625
3.0的平方根是:1.7320480346679688
4.0的平方根是:2.000001907348633
5.0的平方根是:2.2360687255859375
6.0的平方根是:2.4494895935058594
7.0的平方根是:2.645751953125
8.0的平方根是:2.8284263610839844
9.0的平方根是:3.0
10.0的平方根是:3.1622767448425293
11.0的平方根是:3.3166251182556152
12.0的平方根是:3.464102029800415
13.0的平方根是:3.605550765991211
14.0的平方根是:3.7416574954986572
15.0的平方根是:3.872982978820801
16.0的平方根是:4.000000715255737
17.0的平方根是:4.123106002807617
18.0的平方根是:4.2426406145095825
19.0的平方根是:4.358898162841797
20.0的平方根是:4.472136497497559
21.0的平方根是:4.58257532119751
22.0的平方根是:4.690414905548096
23.0的平方根是:4.795831680297852
24.0的平方根是:4.898979663848877
25.0的平方根是:4.999999046325684
26.0的平方根是:5.09902036190033
27.0的平方根是:5.196152567863464
28.0的平方根是:5.291502773761749
29.0的平方根是:5.385165452957153
30.0的平方根是:5.477226376533508
31.0的平方根是:5.567764401435852
32.0的平方根是:5.6568543910980225
33.0的平方根是:5.744562149047852
34.0的平方根是:5.8309513330459595
35.0的平方根是:5.916079938411713
36.0的平方根是:5.999999701976776
37.0的平方根是:6.0827624797821045
38.0的平方根是:6.16441410779953
39.0的平方根是:6.2449981570243835
40.0的平方根是:6.324555397033691
41.0的平方根是:6.403124094009399
42.0的平方根是:6.480740129947662
43.0的平方根是:6.5574381947517395
44.0的平方根是:6.633249133825302
45.0的平方根是:6.708203315734863
46.0的平方根是:6.782330334186554
47.0的平方根是:6.855654418468475
48.0的平方根是:6.928203135728836
49.0的平方根是:7.0
50.0的平方根是:7.071067690849304
51.0的平方根是:7.141428649425507
52.0的平方根是:7.21110263466835
53.0的平方根是:7.280110120773315
54.0的平方根是:7.3484697341918945
55.0的平方根是:7.416198551654816
56.0的平方根是:7.483314856886864
57.0的平方根是:7.549834489822388
58.0的平方根是:7.615772694349289
59.0的平方根是:7.681146144866943
60.0的平方根是:7.745967239141464
61.0的平方根是:7.810250282287598
62.0的平方根是:7.874008297920227
63.0的平方根是:7.937254101037979
64.0的平方根是:7.999999582767487
65.0的平方根是:8.062257766723633
66.0的平方根是:8.124038264155388
67.0的平方根是:8.185353100299835
68.0的平方根是:8.246211096644402
69.0的平方根是:8.306623876094818
70.0的平方根是:8.366600066423416
71.0的平方根是:8.426149398088455
72.0的平方根是:8.485280811786652
73.0的平方根是:8.54400360584259
74.0的平方根是:8.602325409650803
75.0的平方根是:8.660254389047623
76.0的平方根是:8.71779827773571
77.0的平方根是:8.774964451789856
78.0的平方根是:8.8317611515522
79.0的平方根是:8.888194143772125
80.0的平方根是:8.944271355867386
81.0的平方根是:8.999999523162842
82.0的平方根是:9.055385395884514
83.0的平方根是:9.110433369874954
84.0的平方根是:9.165151596069336
85.0的平方根是:9.219544768333435
86.0的平方根是:9.273618407547474
87.0的平方根是:9.32737897336483
88.0的平方根是:9.38083203136921
89.0的平方根是:9.433980941772461
90.0的平方根是:9.48683275282383
91.0的平方根是:9.53939175605774
92.0的平方根是:9.591662764549255
93.0的平方根是:9.643651187419891
94.0的平方根是:9.695359639823437
95.0的平方根是:9.746794134378433
96.0的平方根是:9.797958642244339
97.0的平方根是:9.848857879638672
98.0的平方根是:9.899495214223862
99.0的平方根是:9.949874818325043
100.0的平方根是:10.000000268220901
Process finished with exit code 0