pub trait CDatatype: Copy + Add<Output = Self> + Div<Output = Self> + Mul<Output = Self> + Rem<Output = Self> + Sub<Output = Self> + PartialEq + PartialOrd + Sum + Send + Sync + 'static {
type Float: Float;
type Neg: CDatatype;
const TYPE_STR: &'static str;
// Required methods
fn max() -> Self;
fn min() -> Self;
fn one() -> Self;
fn zero() -> Self;
fn from_float(float: Self::Float) -> Self;
fn from_f64(f: f64) -> Self;
fn abs(self) -> Self;
fn neg(self) -> Self::Neg;
fn round(self) -> Self;
fn to_float(self) -> Self::Float;
fn to_f64(self) -> f64;
// Provided method
fn not(self) -> u8 { ... }
}