bin_float_checked API

bin_float_checked は Result[BinFloat, ArithmeticError] を包む閉じたラッパー BinFloatResult を提供します。すべての演算は BinFloatResult を受け取って同じ型を返し、すべてのオペランドが成功値であれば対応する bin_float の演算を適用し、そうでなければ最初のエラーをそのまま伝播します。このラッパーは IEEE フラグを保持しません。チュートリアルではパイプラインを段階的に組み立て、設計ページではこのラッパーをエラーモナドとしてモデル化し、それが依拠する合成則を証明します。

以下の例では、次のヘルパーで結果を出力します。

///|
fn show(r : @bin_float_checked.BinFloatResult) -> String {
  match r.result() {
    Ok(v) => v.to_string()
    Err(e) => "error: " + e.message
  }
}

BinFloat::to_string は正確な値を coefficient p exponent の形で出力するので、3p-1 は 3⋅2−1=1.53 \cdot 2^{-1} = 1.5 を表します。

ラッパー型

BinFloatResult

BinFloatResult は成功した BinFloat か ArithmeticError のいずれかです。

pub struct BinFloatResult {
  // private fields
}

唯一のフィールドは非公開で、Result[@bin_float.BinFloat, @arithmetic.ArithmeticError] を保持します。この型には Eq や Show のインスタンスがないため、比較や出力は result() を介して行います。

構築

BinFloatResult::ok, BinFloatResult::err, BinFloatResult::from_result

これらの関数は、既存の値、エラー、または Result を変更せずに包みます。

pub fn BinFloatResult::ok(@bin_float.BinFloat) -> Self
pub fn BinFloatResult::err(@arithmetic.ArithmeticError) -> Self
pub fn BinFloatResult::from_result(Result[@bin_float.BinFloat, @arithmetic.ArithmeticError]) -> Self

すべての r について from_result(r).result() == r が成り立ち、ok(x) は設計ページで説明するモナドの単位です。

BinFloatResult::from_int, from_coefficient, from_double, from_float

これらのコンストラクタは、対応する BinFloat コンストラクタを通じて MoonBit の数値から成功ラッパーを構築します。

pub fn BinFloatResult::from_int(Int, precision? : Int) -> Self
pub fn BinFloatResult::from_coefficient(@bin_float.BinCoeff, precision? : Int, negative? : Bool) -> Self
pub fn BinFloatResult::from_double(Double, precision? : Int) -> Self
pub fn BinFloatResult::from_float(Float, precision? : Int) -> Self
コンストラクタ既定の precision委譲先
from_int53BinFloat::from_int
from_coefficient53(negative の既定値は false)BinFloat::from_coefficient
from_double53BinFloat::from_double
from_float24BinFloat::from_float

これらがエラーを生じることはありません。NaN や無限大の入力は成功した NaN や無限大の値になり、precision に収まらない値は委譲先のコンストラクタと同様に最近接偶数丸めで丸められます。

観測

BinFloatResult::result, is_ok, is_err

これらのメソッドは、包まれた Result を公開し、どちらの分岐かを判定します。

pub fn BinFloatResult::result(Self) -> Result[@bin_float.BinFloat, @arithmetic.ArithmeticError]
pub fn BinFloatResult::is_ok(Self) -> Bool
pub fn BinFloatResult::is_err(Self) -> Bool

is_err(r) == !is_ok(r) です。result() は、エラーを処理する境界で一度だけ呼び出してください。

合成

BinFloatResult::map

map(f) は、失敗しない関数を成功値に適用し、エラーはそのまま残します。

pub fn BinFloatResult::map(Self, (@bin_float.BinFloat) -> @bin_float.BinFloat) -> Self

map(Ok(x),f)=Ok(f(x))\texttt{map}(\texttt{Ok}(x), f) = \texttt{Ok}(f(x)) かつ map(Err(e),f)=Err(e)\texttt{map}(\texttt{Err}(e), f) = \texttt{Err}(e) であり、エラーに対して f は呼ばれません。map が成功をエラーに変えることはありません。

BinFloatResult::bind

bind(f) は、それ自体が失敗しうる関数を適用します。

pub fn BinFloatResult::bind(Self, (@bin_float.BinFloat) -> Self) -> Self

bind(Ok(x),f)=f(x)\texttt{bind}(\texttt{Ok}(x), f) = f(x) かつ bind(Err(e),f)=Err(e)\texttt{bind}(\texttt{Err}(e), f) = \texttt{Err}(e) です。ok と組み合わせるとモナド則(左単位律・右単位律・結合律)を満たします。導出は設計ページを参照してください。

///|
test "map and bind" {
  let halve = fn(x : @bin_float.BinFloat) { x * @bin_float.BinFloat::from_double(0.5) }
  let positive = fn(x : @bin_float.BinFloat) {
    if x.sign() == @def.Sign::Positive {
      @bin_float_checked.BinFloatResult::ok(x)
    } else {
      @bin_float_checked.BinFloatResult::err(
        @lf_arith.ArithmeticError::domain_error("expected a positive value"),
      )
    }
  }
  let good = @bin_float_checked.BinFloatResult::from_int(3).map(halve).bind(positive)
  inspect(show(good), content="3p-1")
  let bad = @bin_float_checked.BinFloatResult::from_int(-3).bind(positive).map(halve)
  inspect(show(bad), content="error: expected a positive value")
}

単項の値写像

neg, abs, ulp, normalized, with_precision

これらのメソッドは同名の BinFloat メソッドの map であり、エラーを生じることはありません。

pub fn BinFloatResult::neg(Self) -> Self
pub fn BinFloatResult::abs(Self) -> Self
pub fn BinFloatResult::ulp(Self) -> Self
pub fn BinFloatResult::normalized(Self) -> Self
pub fn BinFloatResult::with_precision(Self, Int, @arithmetic.RoundingMode) -> Self

with_precision(p, mode) は、指数を無制限として、方向 mode で max⁡(1,p)\max(1,p) ビットに丸めます。ulp は値の精度における最終桁の単位(ulp)です(非有限値では NaN)。

算術演算

add, sub, mul

これらのメソッドは、BinFloat の演算子で 2 つのラッパーを組み合わせます。

pub fn BinFloatResult::add(Self, Self) -> Self
pub fn BinFloatResult::sub(Self, Self) -> Self
pub fn BinFloatResult::mul(Self, Self) -> Self

self がエラーならそれを返し、そうでなく other がエラーならそのエラーを返し、いずれでもなければ結果は Ok(lhs op rhs) です。BinFloat の演算子は 2 つのオペランドの精度のうち大きいほうで最近接偶数丸めを行い、失敗することはありません。∞−∞\infty - \infty のような無効なケースは成功した NaN を生じます。

div

div は 2 つのラッパーを除算し、ゼロ除算を報告します。

pub fn BinFloatResult::div(Self, Self) -> Self

オペランドのエラー(左が先)の後、結果は BinFloat::div_checked(lhs, rhs) となります。除数が有限のゼロ(±0\pm 0)であれば被除数にかかわらず(0/00/0 や NaN/0/0 を含む)DivisionByZero エラー、それ以外では丸められた商です。

min, max

これらのメソッドは BinFloat::min / BinFloat::max で小さいほう・大きいほうのオペランドを取ります。これらは NaN のオペランドを無視し、もう一方を採用します。

pub fn BinFloatResult::min(Self, Self) -> Self
pub fn BinFloatResult::max(Self, Self) -> Self

clamp

clamp(min~, max~) は値を区間内に制限します。

pub fn BinFloatResult::clamp(Self, min~ : Self, max~ : Self) -> Self

エラーは self、min、max の順に取り出されます。その後、BinFloat::clamp_checked は、境界が NaN であるか min > max のとき DomainError を返し、それ以外ではクランプされた値を返します。

///|
test "arithmetic keeps the first error" {
  let one = @bin_float_checked.BinFloatResult::from_int(1)
  let zero = @bin_float_checked.BinFloatResult::from_int(0)
  inspect(show(one + one * one), content="1p1")
  inspect(show(one / zero), content="error: division by zero")
  let left = @bin_float_checked.BinFloatResult::err(
    @lf_arith.ArithmeticError::unsupported("left"),
  )
  inspect(show(left + one / zero), content="error: left")
  inspect(show(one / zero + left), content="error: division by zero")
  let clamped = @bin_float_checked.BinFloatResult::from_int(5).clamp(
    min=zero,
    max=@bin_float_checked.BinFloatResult::from_int(3),
  )
  inspect(show(clamped), content="3p0")
  let reversed = one.clamp(min=@bin_float_checked.BinFloatResult::from_int(3), max=zero)
  inspect(show(reversed), content="error: min must not exceed max")
}

contextual 算術演算

add_ctx, sub_ctx, mul_ctx, div_ctx

これらのメソッドは、明示的な BinaryContext のもとで BinFloat::*_ctx 演算を適用し、その値だけを保持します。

pub fn BinFloatResult::add_ctx(Self, Self, @bin_float.BinaryContext) -> Self
pub fn BinFloatResult::sub_ctx(Self, Self, @bin_float.BinaryContext) -> Self
pub fn BinFloatResult::mul_ctx(Self, Self, @bin_float.BinaryContext) -> Self
pub fn BinFloatResult::div_ctx(Self, Self, @bin_float.BinaryContext) -> Self

結果はコンテキストの精度、丸め方向、指数範囲を持ち、IEEE のオーバーフロー、アンダーフロー、非正規化数の処理が適用されます。そのステップの BinaryFlags は破棄され、IEEE の例外的なケースは成功値となります。div がエラーを返す場面で、div_ctx のゼロ除算は ±∞\pm\infty(0/00/0 なら NaN)を返します。フラグが重要な場合は bin_float を直接使用してください。

///|
test "context arithmetic rounds to the context and drops flags" {
  let binary32 = @bin_float.BinaryContext::binary32()
  let tenth = @bin_float_checked.BinFloatResult::from_double(0.1)
  let zero = @bin_float_checked.BinFloatResult::from_int(0)
  inspect(show(tenth.add_ctx(zero, binary32)), content="13421773p-27")
  let one = @bin_float_checked.BinFloatResult::from_int(1)
  inspect(show(one.div_ctx(zero, binary32)), content="inf")
  inspect(show(one.div(zero)), content="error: division by zero")
}

冪と冪根

sqrt, sqrt_ctx

sqrt はオペランドの精度で平方根を求め、sqrt_ctx はコンテキストのもとで求めます。

pub fn BinFloatResult::sqrt(Self) -> Self
pub fn BinFloatResult::sqrt_ctx(Self, @bin_float.BinaryContext) -> Self

sqrt は BinFloat::sqrt であり、負の非ゼロ引数(−∞-\infty を含む)に対して DomainError を返します。−0=−0\sqrt{-0} = -0 であり、NaN からは NaN が得られます。sqrt_ctx は失敗せず、負の引数に対しては成功した NaN を返します(invalid フラグは捨てられます)。

pow_nat, pow_int, pow_int_ctx, pown, pown_ctx

これらのメソッドは値を整数乗します。

pub fn BinFloatResult::pow_nat(Self, UInt) -> Self
pub fn BinFloatResult::pow_int(Self, Int) -> Self
pub fn BinFloatResult::pow_int_ctx(Self, Int, @bin_float.BinaryContext) -> Self
pub fn BinFloatResult::pown(Self, Int) -> Self
pub fn BinFloatResult::pown_ctx(Self, Int, @bin_float.BinaryContext) -> Self

pow_nat(n) は Luna-Flow/arithmetic のトレイトメソッド PowNatChecked::pow_nat_checked を ArithmeticContext::new(x.precision()) で呼び出し、bin_float はこれをその精度・最近接偶数丸めの無制限バイナリコンテキストに対応させます。pow_int と pown(同じ演算の IEEE 名)は、底がゼロで指数が負のとき DivisionByZero エラーを返し、それ以外ではオペランドの精度で丸めた冪を返します。_ctx 版は失敗せず、底がゼロで指数が負のとき ±∞\pm\infty を返します。

rootn, rootn_ctx

rootn(n) は BinFloat::try_rootn_ctx で実数の nn 乗根を計算します。

pub fn BinFloatResult::rootn(Self, Int) -> Self
pub fn BinFloatResult::rootn_ctx(Self, Int, @bin_float.BinaryContext) -> Self

rootn はオペランドの精度の無制限コンテキストを、rootn_ctx は与えられたコンテキストを使用します。どちらも次数 00 と負数の偶数乗根に対して DomainError を報告し、CertificationFailure を報告することもあります。負数の奇数乗根は負になります。rootn(-8, 3) は −2-2 です。

pow, pow_ctx

pow(y) は BinFloat::try_pow_ctx で、二進の指数に対する xyx^{y} を計算します。

pub fn BinFloatResult::pow(Self, Self) -> Self
pub fn BinFloatResult::pow_ctx(Self, Self, @bin_float.BinaryContext) -> Self

pow は大きいほうのオペランド精度で無制限コンテキストを使用します。オペランドのエラーが先に報告され(底、次に指数)、演算自体は負の底と非整数の指数(たとえば (−2)0.5(-2)^{0.5})に対して DomainError を報告し、CertificationFailure を報告することもあります。

hypot, hypot_ctx

hypot(y) は BinFloat::try_hypot_ctx で、途中でオーバーフローを起こさずに x2+y2\sqrt{x^2 + y^2} を計算します。

pub fn BinFloatResult::hypot(Self, Self) -> Self
pub fn BinFloatResult::hypot_ctx(Self, Self, @bin_float.BinaryContext) -> Self

hypot は大きいほうのオペランド精度で無制限コンテキストを使用します。

///|
test "powers and roots" {
  let r = fn(n : Int) { @bin_float_checked.BinFloatResult::from_int(n) }
  inspect(show(@bin_float_checked.BinFloatResult::from_int(81, precision=48).sqrt()), content="9p0")
  inspect(show(r(-4).sqrt()), content="error: sqrt requires a non-negative value")
  inspect(show(r(3).pow_nat(10)), content="59049p0")
  inspect(show(r(0).pow_int(-1)), content="error: negative exponent requires a non-zero base")
  inspect(show(r(-8).rootn(3)), content="-1p1")
  inspect(show(r(8).rootn(0)), content="error: rootn degree must not be zero")
  inspect(show(r(3).hypot(r(4))), content="5p0")
}

初等関数

指数関数と対数関数

exp、exp2、exp10、expm1、ln、log2、log10、log1p、exp_ln は、bin_float の認証付き初等関数を適用します。

pub fn BinFloatResult::exp(Self) -> Self
pub fn BinFloatResult::exp_ctx(Self, @bin_float.BinaryContext) -> Self
pub fn BinFloatResult::exp2(Self) -> Self
pub fn BinFloatResult::exp2_ctx(Self, @bin_float.BinaryContext) -> Self
pub fn BinFloatResult::exp10(Self) -> Self
pub fn BinFloatResult::exp10_ctx(Self, @bin_float.BinaryContext) -> Self
pub fn BinFloatResult::expm1(Self) -> Self
pub fn BinFloatResult::expm1_ctx(Self, @bin_float.BinaryContext) -> Self
pub fn BinFloatResult::ln(Self) -> Self
pub fn BinFloatResult::ln_ctx(Self, @bin_float.BinaryContext) -> Self
pub fn BinFloatResult::log2(Self) -> Self
pub fn BinFloatResult::log2_ctx(Self, @bin_float.BinaryContext) -> Self
pub fn BinFloatResult::log10(Self) -> Self
pub fn BinFloatResult::log10_ctx(Self, @bin_float.BinaryContext) -> Self
pub fn BinFloatResult::log1p(Self) -> Self
pub fn BinFloatResult::log1p_ctx(Self, @bin_float.BinaryContext) -> Self
pub fn BinFloatResult::exp_ln(Self) -> Self
pub fn BinFloatResult::exp_ln_ctx(Self, @bin_float.BinaryContext) -> Self

各 name メソッドは BinaryContext::unbounded(x.precision())、すなわち指数制限なしでオペランドの精度への最近接偶数丸めのもとでの BinFloat::try_name_ctx の bind です。各 name_ctx メソッドは代わりに与えられたコンテキストを使用します。結果は正しく丸められます。エラーは try_* 関数のものと同じで、負数の対数や −1-1 未満の log1p に対する DomainError、および精緻化の予算内で丸めを認証できないときの CertificationFailure です。極はエラーではなく値です(ln⁡0=−∞\ln 0 = -\infty)。exp_ln は ln⁡(exp⁡(x))\ln(\exp(x)) を 1 つの融合演算として評価します。これは ∣x∣≤1/8|x| \le 1/8 に対してのみ認証されており、それより大きい有限の引数には CertificationFailure(ステージ RangeReduction、理由 RangeNotCertified)を返します。

三角関数

sin、cos、tan、sinpi、cospi、tanpi、asin、acos、atan、atan2 も同じパターンに従います。

pub fn BinFloatResult::sin(Self) -> Self
pub fn BinFloatResult::sin_ctx(Self, @bin_float.BinaryContext) -> Self
pub fn BinFloatResult::cos(Self) -> Self
pub fn BinFloatResult::cos_ctx(Self, @bin_float.BinaryContext) -> Self
pub fn BinFloatResult::tan(Self) -> Self
pub fn BinFloatResult::tan_ctx(Self, @bin_float.BinaryContext) -> Self
pub fn BinFloatResult::sinpi(Self) -> Self
pub fn BinFloatResult::sinpi_ctx(Self, @bin_float.BinaryContext) -> Self
pub fn BinFloatResult::cospi(Self) -> Self
pub fn BinFloatResult::cospi_ctx(Self, @bin_float.BinaryContext) -> Self
pub fn BinFloatResult::tanpi(Self) -> Self
pub fn BinFloatResult::tanpi_ctx(Self, @bin_float.BinaryContext) -> Self
pub fn BinFloatResult::asin(Self) -> Self
pub fn BinFloatResult::asin_ctx(Self, @bin_float.BinaryContext) -> Self
pub fn BinFloatResult::acos(Self) -> Self
pub fn BinFloatResult::acos_ctx(Self, @bin_float.BinaryContext) -> Self
pub fn BinFloatResult::atan(Self) -> Self
pub fn BinFloatResult::atan_ctx(Self, @bin_float.BinaryContext) -> Self
pub fn BinFloatResult::atan2(Self, Self) -> Self
pub fn BinFloatResult::atan2_ctx(Self, Self, @bin_float.BinaryContext) -> Self

sinpi(x) は sin⁡(πx)\sin(\pi x) であり、他も同様です。asin と acos は [−1,1][-1, 1] の外で DomainError を報告し、tanpi は半整数で ±∞\pm\infty を返します。atan2(self, abscissa) は点 (abscissa,self)(\text{abscissa}, \text{self}) の角度です。そのエラーは縦座標、横座標、演算の順に取り出され、atan2 のコンテキストは大きいほうのオペランド精度を使用します。

双曲線関数

sinh、cosh、tanh、asinh、acosh、atanh も同じパターンに従います。

pub fn BinFloatResult::sinh(Self) -> Self
pub fn BinFloatResult::sinh_ctx(Self, @bin_float.BinaryContext) -> Self
pub fn BinFloatResult::cosh(Self) -> Self
pub fn BinFloatResult::cosh_ctx(Self, @bin_float.BinaryContext) -> Self
pub fn BinFloatResult::tanh(Self) -> Self
pub fn BinFloatResult::tanh_ctx(Self, @bin_float.BinaryContext) -> Self
pub fn BinFloatResult::asinh(Self) -> Self
pub fn BinFloatResult::asinh_ctx(Self, @bin_float.BinaryContext) -> Self
pub fn BinFloatResult::acosh(Self) -> Self
pub fn BinFloatResult::acosh_ctx(Self, @bin_float.BinaryContext) -> Self
pub fn BinFloatResult::atanh(Self) -> Self
pub fn BinFloatResult::atanh_ctx(Self, @bin_float.BinaryContext) -> Self

acosh は 11 未満で、atanh は ∣x∣>1|x| > 1 で DomainError を報告します。atanh⁡(±1)=±∞\operatorname{atanh}(\pm 1) = \pm\infty です。

///|
test "elementary functions" {
  let r = fn(n : Int) { @bin_float_checked.BinFloatResult::from_int(n) }
  inspect(show(r(2).ln()), content="6243314768165359p-53")
  inspect(
    show(r(2).ln_ctx(@bin_float.BinaryContext::unbounded(24))),
    content="1453635p-21",
  )
  inspect(show(r(0).ln()), content="-inf")
  inspect(show(r(-4).ln()), content="error: ln requires a positive value")
  inspect(show(r(2).asin()), content="error: asin requires an input in [-1, 1]")
  inspect(show(r(3).exp_ln()), content="error: certified evaluation failed for exp_ln")
  inspect(show(r(0).exp().ln()), content="0")
}

トレイト実装

Add, Sub, Mul, Div, Neg

演算子 +、-、*、/ と単項 - は、add、sub、mul、div、neg を呼び出します。

pub impl Add for BinFloatResult
pub impl Sub for BinFloatResult
pub impl Mul for BinFloatResult
pub impl Div for BinFloatResult
pub impl Neg for BinFloatResult

したがって、ラッパーに対する / はゼロ除算を報告しますが、素の BinFloat 値に対する / は無限大を返します。

非推奨

BinFloatResult::flat_map

flat_map は bind の旧名です。r.flat_map(f) を r.bind(f) に置き換えてください。

#deprecated
pub fn BinFloatResult::flat_map(Self, (@bin_float.BinFloat) -> Self) -> Self

公開インターフェース全体

以下のスナップショットは、パッケージの生成された完全なインターフェースです。

// Generated using `moon info`, DON'T EDIT IT
package "Luna-Flow/floating/bin_float_checked"

import {
  "Luna-Flow/arithmetic",
  "Luna-Flow/floating/bin_float",
}

// Values

// Errors

// Types and methods
pub struct BinFloatResult {
  // private fields
}
pub fn BinFloatResult::abs(Self) -> Self
pub fn BinFloatResult::acos(Self) -> Self
pub fn BinFloatResult::acos_ctx(Self, @bin_float.BinaryContext) -> Self
pub fn BinFloatResult::acosh(Self) -> Self
pub fn BinFloatResult::acosh_ctx(Self, @bin_float.BinaryContext) -> Self
pub fn BinFloatResult::add(Self, Self) -> Self
pub fn BinFloatResult::add_ctx(Self, Self, @bin_float.BinaryContext) -> Self
pub fn BinFloatResult::asin(Self) -> Self
pub fn BinFloatResult::asin_ctx(Self, @bin_float.BinaryContext) -> Self
pub fn BinFloatResult::asinh(Self) -> Self
pub fn BinFloatResult::asinh_ctx(Self, @bin_float.BinaryContext) -> Self
pub fn BinFloatResult::atan(Self) -> Self
pub fn BinFloatResult::atan2(Self, Self) -> Self
pub fn BinFloatResult::atan2_ctx(Self, Self, @bin_float.BinaryContext) -> Self
pub fn BinFloatResult::atan_ctx(Self, @bin_float.BinaryContext) -> Self
pub fn BinFloatResult::atanh(Self) -> Self
pub fn BinFloatResult::atanh_ctx(Self, @bin_float.BinaryContext) -> Self
pub fn BinFloatResult::bind(Self, (@bin_float.BinFloat) -> Self) -> Self
pub fn BinFloatResult::clamp(Self, min~ : Self, max~ : Self) -> Self
pub fn BinFloatResult::cos(Self) -> Self
pub fn BinFloatResult::cos_ctx(Self, @bin_float.BinaryContext) -> Self
pub fn BinFloatResult::cosh(Self) -> Self
pub fn BinFloatResult::cosh_ctx(Self, @bin_float.BinaryContext) -> Self
pub fn BinFloatResult::cospi(Self) -> Self
pub fn BinFloatResult::cospi_ctx(Self, @bin_float.BinaryContext) -> Self
pub fn BinFloatResult::div(Self, Self) -> Self
pub fn BinFloatResult::div_ctx(Self, Self, @bin_float.BinaryContext) -> Self
pub fn BinFloatResult::err(@arithmetic.ArithmeticError) -> Self
pub fn BinFloatResult::exp(Self) -> Self
pub fn BinFloatResult::exp10(Self) -> Self
pub fn BinFloatResult::exp10_ctx(Self, @bin_float.BinaryContext) -> Self
pub fn BinFloatResult::exp2(Self) -> Self
pub fn BinFloatResult::exp2_ctx(Self, @bin_float.BinaryContext) -> Self
pub fn BinFloatResult::exp_ctx(Self, @bin_float.BinaryContext) -> Self
pub fn BinFloatResult::exp_ln(Self) -> Self
pub fn BinFloatResult::exp_ln_ctx(Self, @bin_float.BinaryContext) -> Self
pub fn BinFloatResult::expm1(Self) -> Self
pub fn BinFloatResult::expm1_ctx(Self, @bin_float.BinaryContext) -> Self
#deprecated
pub fn BinFloatResult::flat_map(Self, (@bin_float.BinFloat) -> Self) -> Self
pub fn BinFloatResult::from_coefficient(@bin_float.BinCoeff, precision? : Int, negative? : Bool) -> Self
pub fn BinFloatResult::from_double(Double, precision? : Int) -> Self
pub fn BinFloatResult::from_float(Float, precision? : Int) -> Self
pub fn BinFloatResult::from_int(Int, precision? : Int) -> Self
pub fn BinFloatResult::from_result(Result[@bin_float.BinFloat, @arithmetic.ArithmeticError]) -> Self
pub fn BinFloatResult::hypot(Self, Self) -> Self
pub fn BinFloatResult::hypot_ctx(Self, Self, @bin_float.BinaryContext) -> Self
pub fn BinFloatResult::is_err(Self) -> Bool
pub fn BinFloatResult::is_ok(Self) -> Bool
pub fn BinFloatResult::ln(Self) -> Self
pub fn BinFloatResult::ln_ctx(Self, @bin_float.BinaryContext) -> Self
pub fn BinFloatResult::log10(Self) -> Self
pub fn BinFloatResult::log10_ctx(Self, @bin_float.BinaryContext) -> Self
pub fn BinFloatResult::log1p(Self) -> Self
pub fn BinFloatResult::log1p_ctx(Self, @bin_float.BinaryContext) -> Self
pub fn BinFloatResult::log2(Self) -> Self
pub fn BinFloatResult::log2_ctx(Self, @bin_float.BinaryContext) -> Self
pub fn BinFloatResult::map(Self, (@bin_float.BinFloat) -> @bin_float.BinFloat) -> Self
pub fn BinFloatResult::max(Self, Self) -> Self
pub fn BinFloatResult::min(Self, Self) -> Self
pub fn BinFloatResult::mul(Self, Self) -> Self
pub fn BinFloatResult::mul_ctx(Self, Self, @bin_float.BinaryContext) -> Self
pub fn BinFloatResult::neg(Self) -> Self
pub fn BinFloatResult::normalized(Self) -> Self
pub fn BinFloatResult::ok(@bin_float.BinFloat) -> Self
pub fn BinFloatResult::pow(Self, Self) -> Self
pub fn BinFloatResult::pow_ctx(Self, Self, @bin_float.BinaryContext) -> Self
pub fn BinFloatResult::pow_int(Self, Int) -> Self
pub fn BinFloatResult::pow_int_ctx(Self, Int, @bin_float.BinaryContext) -> Self
pub fn BinFloatResult::pow_nat(Self, UInt) -> Self
pub fn BinFloatResult::pown(Self, Int) -> Self
pub fn BinFloatResult::pown_ctx(Self, Int, @bin_float.BinaryContext) -> Self
pub fn BinFloatResult::result(Self) -> Result[@bin_float.BinFloat, @arithmetic.ArithmeticError]
pub fn BinFloatResult::rootn(Self, Int) -> Self
pub fn BinFloatResult::rootn_ctx(Self, Int, @bin_float.BinaryContext) -> Self
pub fn BinFloatResult::sin(Self) -> Self
pub fn BinFloatResult::sin_ctx(Self, @bin_float.BinaryContext) -> Self
pub fn BinFloatResult::sinh(Self) -> Self
pub fn BinFloatResult::sinh_ctx(Self, @bin_float.BinaryContext) -> Self
pub fn BinFloatResult::sinpi(Self) -> Self
pub fn BinFloatResult::sinpi_ctx(Self, @bin_float.BinaryContext) -> Self
pub fn BinFloatResult::sqrt(Self) -> Self
pub fn BinFloatResult::sqrt_ctx(Self, @bin_float.BinaryContext) -> Self
pub fn BinFloatResult::sub(Self, Self) -> Self
pub fn BinFloatResult::sub_ctx(Self, Self, @bin_float.BinaryContext) -> Self
pub fn BinFloatResult::tan(Self) -> Self
pub fn BinFloatResult::tan_ctx(Self, @bin_float.BinaryContext) -> Self
pub fn BinFloatResult::tanh(Self) -> Self
pub fn BinFloatResult::tanh_ctx(Self, @bin_float.BinaryContext) -> Self
pub fn BinFloatResult::tanpi(Self) -> Self
pub fn BinFloatResult::tanpi_ctx(Self, @bin_float.BinaryContext) -> Self
pub fn BinFloatResult::ulp(Self) -> Self
pub fn BinFloatResult::with_precision(Self, Int, @arithmetic.RoundingMode) -> Self
pub impl Add for BinFloatResult
pub impl Div for BinFloatResult
pub impl Mul for BinFloatResult
pub impl Neg for BinFloatResult
pub impl Sub for BinFloatResult

// Type aliases

// Traits