Skip to content

Commit 4d3f3ea

Browse files
committed
Fix bug #304
Use float point to internal computation for intergeral coordinate key points.
1 parent a1cdb43 commit 4d3f3ea

File tree

1 file changed

+8
-5
lines changed

1 file changed

+8
-5
lines changed

plotters/src/coord/ranged1d/types/numeric.rs

Lines changed: 8 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -199,13 +199,12 @@ macro_rules! gen_key_points_comp {
199199
fn $name(range: ($type, $type), max_points: usize) -> Vec<$type> {
200200
let mut scale: $type = 1;
201201
let range = (range.0.min(range.1), range.0.max(range.1));
202-
'outer: while (range.1 - range.0 + scale - 1) as usize / (scale as usize) > max_points {
202+
let range_size = range.1 as f64 - range.0 as f64;
203+
'outer: while (range_size / scale as f64).ceil() > max_points as f64 {
203204
let next_scale = scale * 10;
204205
for new_scale in [scale * 2, scale * 5, scale * 10].iter() {
205206
scale = *new_scale;
206-
if (range.1 - range.0 + *new_scale - 1) as usize / (*new_scale as usize)
207-
< max_points
208-
{
207+
if (range_size / *new_scale as f64).ceil() < max_points as f64 {
209208
break 'outer;
210209
}
211210
}
@@ -220,7 +219,11 @@ macro_rules! gen_key_points_comp {
220219
let mut ret = vec![];
221220
while left <= right {
222221
ret.push(left as $type);
223-
left += scale;
222+
if left < right {
223+
left += scale;
224+
} else {
225+
break;
226+
}
224227
}
225228

226229
return ret;

0 commit comments

Comments
 (0)