use num_bigint::BigUint;
use num_rational::BigRational;
use serde::{Deserialize, Serialize};
#[derive(Debug, Clone, Copy, PartialEq, Eq, PartialOrd, Ord, Hash, Serialize, Deserialize)]
pub enum RoundingMode {
NearestTiesToEven,
TowardZero,
TowardPositive,
TowardNegative,
}
#[derive(Debug, Clone, Copy, PartialEq, Eq, PartialOrd, Ord, Hash, Serialize, Deserialize)]
pub struct FloatSort {
pub exponent_bits: u16,
pub significand_bits: u16,
}
#[derive(Debug, Clone, PartialEq, Eq)]
pub enum FloatClass {
QuietNaN { payload: BigUint },
PositiveInfinity,
NegativeInfinity,
PositiveZero,
NegativeZero,
Finite { negative: bool, value: BigRational },
}
#[derive(Debug, Clone, PartialEq, Eq)]
pub struct FloatValue {
pub sort: FloatSort,
pub class: FloatClass,
}