LibrEDA project web page. https://libreda.codeberg.page
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

#### 77 lines 34 KiB Raw Permalink Blame History

 `Roots in num_integer - Rust` `` `

Trait num_integer::Roots[][src]

pub trait Roots: Integer {`
`    fn nth_root(&self, n: u32) -> Self;`
``` ```
`    fn sqrt(&self) -> Self { ... }`
`
fn cbrt(&self) -> Self { ... }` `}
Expand description

Provides methods to compute an integer’s square root, cube root,` `and arbitrary nth root.

` `

Required methods

Returns the truncated principal nth root of an integer` `– if x >= 0 { ⌊ⁿ√x⌋ } else { ⌈ⁿ√x⌉ }

` `

This is solving for r in rⁿ = x, rounding toward zero.` `If x is positive, the result will satisfy rⁿ ≤ x < (r+1)ⁿ.` `If x is negative and n is odd, then (r-1)ⁿ < x ≤ rⁿ.

` `

Panics

` `

Panics if n is zero:

` ``` ``` `
`
`println!("can't compute ⁰√x : {}", 123.nth_root(0));
` `

or if n is even and self is negative:

` ``` ``` `
`
`println!("no imaginary numbers... {}", (-1).nth_root(10));
` `

Examples

` `
`
`use num_integer::Roots;`
``` ```
`let x: i32 = 12345;`
`assert_eq!(x.nth_root(1), x);`
`assert_eq!(x.nth_root(2), x.sqrt());`
`assert_eq!(x.nth_root(3), x.cbrt());`
`assert_eq!(x.nth_root(4), 10);`
`assert_eq!(x.nth_root(13), 2);`
`assert_eq!(x.nth_root(14), 1);`
`assert_eq!(x.nth_root(std::u32::MAX), 1);`
``` ```
`assert_eq!(std::i32::MAX.nth_root(30), 2);`
`assert_eq!(std::i32::MAX.nth_root(31), 1);`
`assert_eq!(std::i32::MIN.nth_root(31), -2);`
`assert_eq!((std::i32::MIN + 1).nth_root(31), -1);`
``` ```
`assert_eq!(std::u32::MAX.nth_root(31), 2);`
`assert_eq!(std::u32::MAX.nth_root(32), 1);
` `

Provided methods

Returns the truncated principal square root of an integer – ⌊√x⌋

` `

This is solving for r in r² = x, rounding toward zero.` `The result will satisfy r² ≤ x < (r+1)².

` `

Panics

` `

Panics if self is less than zero:

` ``` ``` `
`
`println!("no imaginary numbers... {}", (-1).sqrt());
` `

Examples

` `
`
`use num_integer::Roots;`
``` ```
`let x: i32 = 12345;`
`assert_eq!((x * x).sqrt(), x);`
`assert_eq!((x * x + 1).sqrt(), x);`
`assert_eq!((x * x - 1).sqrt(), x - 1);
` `

Returns the truncated principal cube root of an integer –` `if x >= 0 { ⌊∛x⌋ } else { ⌈∛x⌉ }

` `

This is solving for r in r³ = x, rounding toward zero.` `If x is positive, the result will satisfy r³ ≤ x < (r+1)³.` `If x is negative, then (r-1)³ < x ≤ r³.

` `

Examples

` `
`
`use num_integer::Roots;`
``` ```
`let x: i32 = 1234;`
`assert_eq!((x * x * x).cbrt(), x);`
`assert_eq!((x * x * x + 1).cbrt(), x);`
`assert_eq!((x * x * x - 1).cbrt(), x - 1);`
``` ```
`assert_eq!((-(x * x * x)).cbrt(), -x);`
`assert_eq!((-(x * x * x + 1)).cbrt(), -x);`
`assert_eq!((-(x * x * x - 1)).cbrt(), -(x - 1));
` `

Implementations on Foreign Types

Implementors

`