use flexfloat::prelude::*;
fn main() {
let f64_overflow = f64::MAX * f64::MAX;
println!("f64::MAX * f64::MAX = {f64_overflow}");
let max = FlexFloat::from(f64::MAX);
let huge = max.clone() * max.clone();
println!("\nFlexFloat::from(f64::MAX) * FlexFloat::from(f64::MAX):");
println!(" is_infinite = {}", huge.is_infinite()); println!(" is_finite = {}", huge.is_finite()); println!(" result = {huge:e}");
println!("\nRepeated squaring of f64::MAX:");
let mut val = FlexFloat::from(f64::MAX);
for i in 1..=5 {
val = val.clone() * val.clone();
println!(" step {i}: {val:e}");
}
let max2 = FlexFloat::from(f64::MAX) * FlexFloat::from(f64::MAX);
let divided = max2 / FlexFloat::from(f64::MAX);
println!("\n(MAX * MAX) / MAX:");
println!(" result ≈ f64::MAX: {:e}", divided);
}