[][src]Trait verified::Pow

pub trait Pow<Exp> {
    type Output;
    fn powi(self, exp: Exp) -> Self::Output;
}

A type operator that provides exponentiation by repeated squaring.

Example

use typenum::{Pow, N3, P3, Integer};

assert_eq!(<N3 as Pow<P3>>::Output::to_i32(), -27);

Associated Types

type Output

The result of the exponentiation.

Loading content...

Required methods

fn powi(self, exp: Exp) -> Self::Output

This function isn't used in this crate, but may be useful for others. It is implemented for primitives.

Example

use typenum::{Pow, U3};

let a = 7u32.powi(U3::new());
let b = 7u32.pow(3);
assert_eq!(a, b);

let x = 3.0.powi(U3::new());
let y = 27.0;
assert_eq!(x, y);
Loading content...

Implementations on Foreign Types

impl Pow<Z0> for u16[src]

type Output = u16

impl<U, B> Pow<UInt<U, B>> for i32 where
    B: Bit,
    U: Unsigned
[src]

type Output = i32

impl Pow<Z0> for i32[src]

type Output = i32

impl Pow<UTerm> for u64[src]

type Output = u64

impl<U> Pow<PInt<U>> for u8 where
    U: NonZero + Unsigned
[src]

type Output = u8

impl Pow<UTerm> for i64[src]

type Output = i64

impl<U> Pow<PInt<U>> for f32 where
    U: NonZero + Unsigned
[src]

type Output = f32

impl Pow<UTerm> for f64[src]

type Output = f64

impl<U, B> Pow<UInt<U, B>> for f64 where
    B: Bit,
    U: Unsigned
[src]

type Output = f64

impl<U, B> Pow<UInt<U, B>> for i16 where
    B: Bit,
    U: Unsigned
[src]

type Output = i16

impl Pow<UTerm> for i32[src]

type Output = i32

impl<U> Pow<PInt<U>> for i8 where
    U: NonZero + Unsigned
[src]

type Output = i8

impl Pow<UTerm> for i8[src]

type Output = i8

impl<U, B> Pow<UInt<U, B>> for u8 where
    B: Bit,
    U: Unsigned
[src]

type Output = u8

impl Pow<Z0> for i64[src]

type Output = i64

impl<U> Pow<PInt<U>> for i32 where
    U: NonZero + Unsigned
[src]

type Output = i32

impl<U, B> Pow<UInt<U, B>> for i64 where
    B: Bit,
    U: Unsigned
[src]

type Output = i64

impl Pow<Z0> for f64[src]

type Output = f64

impl<U, B> Pow<UInt<U, B>> for isize where
    B: Bit,
    U: Unsigned
[src]

type Output = isize

impl<U> Pow<PInt<U>> for u64 where
    U: NonZero + Unsigned
[src]

type Output = u64

impl Pow<UTerm> for u32[src]

type Output = u32

impl Pow<Z0> for i8[src]

type Output = i8

impl<U> Pow<PInt<U>> for u16 where
    U: NonZero + Unsigned
[src]

type Output = u16

impl<U> Pow<PInt<U>> for isize where
    U: NonZero + Unsigned
[src]

type Output = isize

impl<U, B> Pow<UInt<U, B>> for u32 where
    B: Bit,
    U: Unsigned
[src]

type Output = u32

impl<U> Pow<PInt<U>> for i16 where
    U: NonZero + Unsigned
[src]

type Output = i16

impl Pow<Z0> for u32[src]

type Output = u32

impl Pow<Z0> for f32[src]

type Output = f32

impl Pow<Z0> for isize[src]

type Output = isize

impl<U> Pow<PInt<U>> for usize where
    U: NonZero + Unsigned
[src]

type Output = usize

impl Pow<UTerm> for i16[src]

type Output = i16

impl<U, B> Pow<UInt<U, B>> for u16 where
    B: Bit,
    U: Unsigned
[src]

type Output = u16

impl<U> Pow<PInt<U>> for f64 where
    U: NonZero + Unsigned
[src]

type Output = f64

impl Pow<Z0> for usize[src]

type Output = usize

impl<U, B> Pow<UInt<U, B>> for f32 where
    B: Bit,
    U: Unsigned
[src]

type Output = f32

impl Pow<Z0> for u64[src]

type Output = u64

impl<U, B> Pow<UInt<U, B>> for i8 where
    B: Bit,
    U: Unsigned
[src]

type Output = i8

impl Pow<UTerm> for u8[src]

type Output = u8

impl Pow<UTerm> for f32[src]

type Output = f32

impl<U> Pow<PInt<U>> for u32 where
    U: NonZero + Unsigned
[src]

type Output = u32

impl Pow<UTerm> for u16[src]

type Output = u16

impl Pow<Z0> for u8[src]

type Output = u8

impl Pow<Z0> for i16[src]

type Output = i16

impl Pow<UTerm> for isize[src]

type Output = isize

impl Pow<UTerm> for usize[src]

type Output = usize

impl<U> Pow<PInt<U>> for i64 where
    U: NonZero + Unsigned
[src]

type Output = i64

impl<U, B> Pow<UInt<U, B>> for u64 where
    B: Bit,
    U: Unsigned
[src]

type Output = u64

impl<U, B> Pow<UInt<U, B>> for usize where
    B: Bit,
    U: Unsigned
[src]

type Output = usize

Loading content...

Implementors

impl Pow<Z0> for Z0[src]

0^0 = 1

type Output = PInt<UInt<UTerm, B1>>

impl<U> Pow<NInt<UInt<U, B0>>> for NInt<UInt<UTerm, B1>> where
    U: Unsigned
[src]

(-1)^N = 1 if N is even

type Output = PInt<UInt<UTerm, B1>>

impl<U> Pow<NInt<UInt<U, B1>>> for NInt<UInt<UTerm, B1>> where
    U: Unsigned
[src]

(-1)^N = -1 if N is odd

type Output = NInt<UInt<UTerm, B1>>

impl<U> Pow<NInt<U>> for PInt<UInt<UTerm, B1>> where
    U: NonZero + Unsigned
[src]

1^N = 1

type Output = PInt<UInt<UTerm, B1>>

impl<U> Pow<NInt<U>> for Z0 where
    U: NonZero + Unsigned
[src]

0^N = 0

type Output = Z0

impl<U> Pow<PInt<U>> for Z0 where
    U: NonZero + Unsigned
[src]

0^P = 0

type Output = Z0

impl<U> Pow<Z0> for NInt<U> where
    U: NonZero + Unsigned
[src]

N^0 = 1

type Output = PInt<UInt<UTerm, B1>>

impl<U> Pow<Z0> for PInt<U> where
    U: NonZero + Unsigned
[src]

P^0 = 1

type Output = PInt<UInt<UTerm, B1>>

impl<Ul, Ur> Pow<PInt<UInt<Ur, B0>>> for NInt<Ul> where
    Ul: NonZero + Unsigned + Pow<UInt<Ur, B0>>,
    Ur: Unsigned,
    <Ul as Pow<UInt<Ur, B0>>>::Output: Unsigned,
    <Ul as Pow<UInt<Ur, B0>>>::Output: NonZero
[src]

N(Ul)^P(Ur) = P(Ul^Ur) if Ur is even

type Output = PInt<<Ul as Pow<UInt<Ur, B0>>>::Output>

impl<Ul, Ur> Pow<PInt<UInt<Ur, B1>>> for NInt<Ul> where
    Ul: NonZero + Unsigned + Pow<UInt<Ur, B1>>,
    Ur: Unsigned,
    <Ul as Pow<UInt<Ur, B1>>>::Output: Unsigned,
    <Ul as Pow<UInt<Ur, B1>>>::Output: NonZero
[src]

N(Ul)^P(Ur) = N(Ul^Ur) if Ur is odd

type Output = NInt<<Ul as Pow<UInt<Ur, B1>>>::Output>

impl<Ul, Ur> Pow<PInt<Ur>> for PInt<Ul> where
    Ul: NonZero + Unsigned + Pow<Ur>,
    Ur: NonZero + Unsigned,
    <Ul as Pow<Ur>>::Output: Unsigned,
    <Ul as Pow<Ur>>::Output: NonZero
[src]

P(Ul)^P(Ur) = P(Ul^Ur)

type Output = PInt<<Ul as Pow<Ur>>::Output>

impl<X, N> Pow<N> for X where
    N: Unsigned,
    X: Unsigned + PrivatePow<UInt<UTerm, B1>, N>, 
[src]

X^N

type Output = <X as PrivatePow<UInt<UTerm, B1>, N>>::Output

Loading content...