1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53
//! This crate provides representations of part of irrational numbers with following categories:
//! - Math constants (`pi`, `e`, etc.)
//! - Values and continued fraction representations
//! - [Quadratic Numbers](https://en.wikipedia.org/wiki/Algebraic_number#Examples)
//! - [Quadratic Irrational](https://en.wikipedia.org/wiki/Quadratic_irrational_number): [QuadraticSurd]
//! - [Continued Fraction](https://en.wikipedia.org/wiki/Continued_fraction)
//! - [Simple continued fraction](https://en.wikipedia.org/wiki/Continued_fraction): [ContinuedFraction], [InfiniteContinuedFraction]
//! - [General continued fraction](https://en.wikipedia.org/wiki/Generalized_continued_fraction): [GeneralContinuedFraction]
//! - Transcendental functions represented in continued fractions
//!
//! It's based on the `num` creates.
//!
//! # Examples
//!
//! ```rust
//! use num_irrational::{FromSqrt, QuadraticSurd};
//! let sq2 = QuadraticSurd::from_sqrt(2i32).unwrap();
//! println!("Square root of 2: {}", sq2); // √2
//!
//! use num_irrational::Computable;
//! let sq2_approx = sq2.approximated(&100).value();
//! println!("Rational approximation with denominator under 100: {}", sq2_approx); // 99/70
//!
//! use core::convert::TryFrom;
//! use num_irrational::ContinuedFraction;
//! // let sq2_fraction = ContinuedFraction::from(sq2); // only if feature `complex` is disabled
//! let sq2_fraction = ContinuedFraction::try_from(sq2).unwrap();
//! println!("Continued Fraction: {}", sq2_fraction); // [1; (2)]
//! ```
//!
//! # Optional Features
//! - `complex`: Enable negative square root base support for [QuadraticSurd]. Note that this flag might
//! change some behavior of the operators on [QuadraticSurd].
//! - `num-complex`: Enable converting [QuadraticSurd] to `num_complex::Complex`. You probably want to enable
//! the `complex` feature at the same time.
//! - `num-bigint`: Enable using big integer as internal representations.
//!
pub mod cont_frac;
pub mod quadratic;
pub mod symbols;
mod traits;
pub use cont_frac::simple::{ContinuedFraction, InfiniteContinuedFraction};
pub use cont_frac::general::GeneralContinuedFraction;
pub use quadratic::surd::QuadraticSurd;
pub use traits::*;
pub type Quadratic32 = QuadraticSurd<i32>;
pub type Quadratic64 = QuadraticSurd<i64>;
#[cfg(feature = "num-bigint")]
pub type BigQuadratic = QuadraticSurd<num_bigint::BigInt>;