pub fn primitive_float_increasing_inclusive_range<T: PrimitiveFloat>(
a: T,
b: T,
) -> PrimitiveFloatIncreasingRange<T> ⓘ
Expand description
Generates all primitive floats in the closed interval $[a, b]$, in ascending order.
Positive and negative zero are treated as two distinct values, with negative zero being smaller than zero.
NiceFloat(a)
must be less than or equal to NiceFloat(b)
. If NiceFloat(a)
and
NiceFloat(b)
are equal, the range contains a single element.
Let $\varphi$ be
to_ordered_representation
:
The output is $(\varphi^{-1}(k))_{k=\varphi(a)}^\varphi(b)$.
The output length is $\varphi(b) - \varphi(a) + 1$.
§Complexity per iteration
Constant time and additional memory.
§Panics
Panics if NiceFloat(a) > NiceFloat(b)
.
§Examples
use malachite_base::iterators::prefix_to_string;
use malachite_base::num::exhaustive::primitive_float_increasing_inclusive_range;
use malachite_base::num::float::NiceFloat;
assert_eq!(
prefix_to_string(
primitive_float_increasing_inclusive_range::<f32>(1.0, 2.0).map(NiceFloat),
20
),
"[1.0, 1.0000001, 1.0000002, 1.0000004, 1.0000005, 1.0000006, 1.0000007, 1.0000008, \
1.000001, 1.0000011, 1.0000012, 1.0000013, 1.0000014, 1.0000015, 1.0000017, 1.0000018, \
1.0000019, 1.000002, 1.0000021, 1.0000023, ...]"
);
assert_eq!(
prefix_to_string(
primitive_float_increasing_inclusive_range::<f32>(1.0, 2.0)
.rev()
.map(NiceFloat),
20
),
"[2.0, 1.9999999, 1.9999998, 1.9999996, 1.9999995, 1.9999994, 1.9999993, 1.9999992, \
1.999999, 1.9999989, 1.9999988, 1.9999987, 1.9999986, 1.9999985, 1.9999983, 1.9999982, \
1.9999981, 1.999998, 1.9999979, 1.9999977, ...]"
);