Skip to content

Commit bf8ea2a

Browse files
committed
Use FMA
1 parent 9f14698 commit bf8ea2a

File tree

1 file changed

+16
-16
lines changed

1 file changed

+16
-16
lines changed

geo/src/algorithm/minimum_rotated_rect.rs

+16-16
Original file line numberDiff line numberDiff line change
@@ -19,8 +19,8 @@ use crate::{algorithm::CoordsIter, ConvexHull, CoordFloat, GeoFloat, GeoNum, Pol
1919
/// mbr.exterior(),
2020
/// &LineString::from(vec![
2121
/// (1.7000000000000004, 24.600000000000005),
22-
/// (14.649854163628412, 25.153412571095238),
23-
/// (14.400000000000002, 31.000000000000007),
22+
/// (14.64985416362841, 25.153412571095235),
23+
/// (14.400000000000002, 31.000000000000004),
2424
/// (1.4501458363715916, 30.446587428904774),
2525
/// (1.7000000000000004, 24.600000000000005),
2626
/// ])
@@ -62,8 +62,8 @@ where
6262
let (mut min_x, mut max_x) = (<T as Bounded>::max_value(), <T as Bounded>::min_value());
6363
let (mut min_y, mut max_y) = (<T as Bounded>::max_value(), <T as Bounded>::min_value());
6464
for point in hull.exterior().points() {
65-
let x = point.y() * edge.1 + point.x() * edge.0;
66-
let y = point.y() * edge.0 - point.x() * edge.1;
65+
let x = point.x().mul_add(edge.0, point.y() * edge.1);
66+
let y = point.x().mul_add(-edge.1, point.y() * edge.0);
6767

6868
min_x = min_x.min(x);
6969
max_x = max_x.max(x);
@@ -84,20 +84,20 @@ where
8484

8585
if let Some(e) = best_edge {
8686
let p1 = (
87-
best_min_x * e.0 - best_min_y * e.1,
88-
best_min_x * e.1 + best_min_y * e.0,
87+
best_min_x.mul_add(e.0, -best_min_y * e.1),
88+
best_min_x.mul_add(e.1, best_min_y * e.0),
8989
);
9090
let p2 = (
91-
best_max_x * e.0 - best_min_y * e.1,
92-
best_max_x * e.1 + best_min_y * e.0,
91+
best_max_x.mul_add(e.0, -best_min_y * e.1),
92+
best_max_x.mul_add(e.1, best_min_y * e.0),
9393
);
9494
let p3 = (
95-
best_max_x * e.0 - best_max_y * e.1,
96-
best_max_x * e.1 + best_max_y * e.0,
95+
best_max_x.mul_add(e.0, -best_max_y * e.1),
96+
best_max_x.mul_add(e.1, best_max_y * e.0),
9797
);
9898
let p4 = (
99-
best_min_x * e.0 - best_max_y * e.1,
100-
best_min_x * e.1 + best_max_y * e.0,
99+
best_min_x.mul_add(e.0, -best_max_y * e.1),
100+
best_min_x.mul_add(e.1, best_max_y * e.0),
101101
);
102102
let rectangle = Polygon::new(
103103
LineString(vec![p1.into(), p2.into(), p3.into(), p4.into(), p1.into()]),
@@ -124,8 +124,8 @@ mod test {
124124
mbr.exterior(),
125125
&LineString::from(vec![
126126
(1.7000000000000004, 24.600000000000005),
127-
(14.649854163628412, 25.153412571095238),
128-
(14.400000000000002, 31.000000000000007),
127+
(14.64985416362841, 25.153412571095235),
128+
(14.400000000000002, 31.000000000000004),
129129
(1.4501458363715916, 30.446587428904774),
130130
(1.7000000000000004, 24.600000000000005),
131131
])
@@ -139,8 +139,8 @@ mod test {
139139
mbr.exterior(),
140140
&LineString::from(vec![
141141
(1.7000000000000004, 24.600000000000005),
142-
(14.649854163628412, 25.153412571095238),
143-
(14.400000000000002, 31.000000000000007),
142+
(14.64985416362841, 25.153412571095235),
143+
(14.400000000000002, 31.000000000000004),
144144
(1.4501458363715916, 30.446587428904774),
145145
(1.7000000000000004, 24.600000000000005),
146146
])

0 commit comments

Comments
 (0)