httk.core.vectors.exactmath¶
Exact math on rationals and decimals: type-preserving transcendentals.
This module provides the transcendental and helper functions used by
FracVector. Every value is computed with 100% exact
integer/rational arithmetic, so results are platform-independent and deterministic by
construction — no floating point is used anywhere in the computation.
Two output domains are supported, selected by a single documented rule:
The result is a
decimal.Decimaliff any numeric input is a Decimal ORdigits=is passed; Fraction/int/str inputs otherwise get today’s exact Fraction behavior withprec/limitsemantics.
One function additionally offers an exact-symbolic domain: sqrt() with exact=True
overrides the output-domain rule and returns the exact
SurdScalar square root (an element of the squarefree-radical
field \(\mathbb{Q}[\sqrt n]\)), with no approximation.
In the Fraction domain each function returns a rational (fractions.Fraction)
approximation to a target precision prec (the error bound), with limit controlling the
result denominator — exactly as before. In the Decimal domain the same rational algorithms
drive Ziv’s adaptive strategy to produce a correctly rounded Decimal to digits significant
digits (default: the active decimal.getcontext() precision, matching stdlib Decimal’s own
model) under rounding ("half_even" = correctly rounded, "down" = correct truncation
toward zero). A Decimal input is converted to a Fraction exactly (fractions.Fraction
accepts a Decimal), so the rational core is identical in both domains; this gives deterministic
cos/sin/atan2/… for Decimals, which the stdlib decimal module does not offer.
Note: a possible future performance follow-up is to soft-import the third-party
cfractions accelerator in place of the standard-library fractions; the
legacy code did so, but on Python 3.12 the standard library is used unconditionally.
Attributes¶
Functions¶
|
Yield the terms of the continued fraction expansion of |
|
Return the rational number with the smallest denominator lying in |
|
Reconstruct a |
|
Parse a numeric string into a central value and an uncertainty (delta). |
|
Convert an arbitrary numeric-like object into a |
|
Return the integer square root of |
|
Return the square root of |
|
Return the cosine of |
|
Return the sine of |
|
Return the tangent of |
|
Return |
|
Return the logarithm of |
|
Return the base-10 logarithm of |
|
Return the arc sine of |
|
Return the arc cosine of |
|
Return the arc tangent of |
|
Return the arc tangent of |
|
Return pi. |
Module Contents¶
- httk.core.vectors.exactmath.get_continued_fraction(p: int, q: int) collections.abc.Iterator[int][source]¶
Yield the terms of the continued fraction expansion of
p/q.
- httk.core.vectors.exactmath.best_rational_in_interval(low: Any, high: Any) fractions.Fraction[source]¶
Return the rational number with the smallest denominator lying in
[low, high].
- httk.core.vectors.exactmath.fraction_from_continued_fraction(cf: list[int]) fractions.Fraction[source]¶
Reconstruct a
fractions.Fractionfrom a list of continued-fraction terms.
- httk.core.vectors.exactmath.string_to_val_and_delta(arg: str, min_accuracy: fractions.Fraction | None = fractions.Fraction(1, 10000)) tuple[fractions.Fraction, fractions.Fraction][source]¶
Parse a numeric string into a central value and an uncertainty (delta).
Recognizes plain decimals, fractions (
"2/3"), scientific notation, and explicit standard-deviation notation ("0.33342(10)"). When no explicit uncertainty is present andmin_accuracyis not None, an uncertainty is inferred from the number of written digits (capped atmin_accuracy).
- httk.core.vectors.exactmath.any_to_fraction(arg: Any, min_accuracy: fractions.Fraction | None = fractions.Fraction(1, 10000)) fractions.Fraction[source]¶
Convert an arbitrary numeric-like object into a
fractions.Fraction.- Parameters:
arg – a number, string, Decimal, Fraction, or anything the Fraction constructor accepts. Strings are parsed for uncertainty via
string_to_val_and_delta().min_accuracy – the minimum assumed accuracy for string input. With the default
1/10000,0.33is taken to mean0.3300(= 33/100), whereas0.3333is taken to mean1/3. Set to None to convert strings exactly.
- httk.core.vectors.exactmath.integer_sqrt(n: int) int[source]¶
Return the integer square root of
n(the floor of its exact square root).
- httk.core.vectors.exactmath.sqrt(x: Any, prec: fractions.Fraction = default_accuracy, limit: bool = True, digits: int | None = None, rounding: str = 'half_even', max_refinements: int | None = None, exact: bool = False) Any[source]¶
Return the square root of
x.Fraction domain (Fraction/int/str input, no
digits=): a rational approximation withinprec(exact for perfect squares),limitcontrolling the denominator. Decimal domain (Decimal input ordigits=given): the correctly-rounded Decimal todigitssignificant digits underrounding.With
exact=Truethe output-domain rule is overridden: the result is the exactSurdScalarsquare root ofx— an element of the squarefree-radical field, with no approximation at all (sqrt(2, exact=True)squares back to exactly2,sqrt(9/4, exact=True)is the rational3/2).xmust be a nonnegative rational;prec/limit/digits/roundingare ignored in this mode.
- httk.core.vectors.exactmath.cos(x: Any, prec: fractions.Fraction = default_accuracy, limit: bool = True, degrees: bool = False, digits: int | None = None, rounding: str = 'half_even', max_refinements: int | None = None) fractions.Fraction | decimal.Decimal[source]¶
Return the cosine of
x(radians unlessdegreesis True). See the module docstring for the type-preservation rule; Decimal mode renders the special-angle exact values exactly (e.g.cos(Decimal("60"), degrees=True) == Decimal("0.5")).
- httk.core.vectors.exactmath.sin(x: Any, prec: fractions.Fraction = default_accuracy, limit: bool = True, degrees: bool = False, digits: int | None = None, rounding: str = 'half_even', max_refinements: int | None = None) fractions.Fraction | decimal.Decimal[source]¶
Return the sine of
x(radians unlessdegreesis True). See the module docstring for the type-preservation rule.
- httk.core.vectors.exactmath.tan(x: Any, degrees: bool = False, prec: fractions.Fraction = default_accuracy, limit: bool = True, digits: int | None = None, rounding: str = 'half_even', max_refinements: int | None = None) fractions.Fraction | decimal.Decimal[source]¶
Return the tangent of
x. See the module docstring for the type-preservation rule.
- httk.core.vectors.exactmath.exp(x: Any, prec: fractions.Fraction = default_accuracy, limit: bool = True, digits: int | None = None, rounding: str = 'half_even', max_refinements: int | None = None) fractions.Fraction | decimal.Decimal[source]¶
Return
eraised to the powerx. See the module docstring for the type-preservation rule.
- httk.core.vectors.exactmath.log(x: Any, base: Any = None, prec: fractions.Fraction = default_accuracy, limit: bool = True, digits: int | None = None, rounding: str = 'half_even', max_refinements: int | None = None) fractions.Fraction | decimal.Decimal[source]¶
Return the logarithm of
xtobase(natural log whenbaseis None). See the module docstring for the type-preservation rule; a Decimalbasealso promotes the result.
- httk.core.vectors.exactmath.log10(x: Any, prec: fractions.Fraction = default_accuracy, limit: bool = True, digits: int | None = None, rounding: str = 'half_even', max_refinements: int | None = None) fractions.Fraction | decimal.Decimal[source]¶
Return the base-10 logarithm of
x. See the module docstring for the type-preservation rule.
- httk.core.vectors.exactmath.asin(x: Any, degrees: bool = False, prec: fractions.Fraction = default_accuracy, limit: bool = True, digits: int | None = None, rounding: str = 'half_even', max_refinements: int | None = None) fractions.Fraction | int | decimal.Decimal[source]¶
Return the arc sine of
x(radians, or degrees ifdegrees). See the module docstring for the type-preservation rule.
- httk.core.vectors.exactmath.acos(x: Any, degrees: bool = False, prec: fractions.Fraction = default_accuracy, limit: bool = True, digits: int | None = None, rounding: str = 'half_even', max_refinements: int | None = None) fractions.Fraction | decimal.Decimal[source]¶
Return the arc cosine of
x(radians, or degrees ifdegrees). See the module docstring for the type-preservation rule.
- httk.core.vectors.exactmath.atan(x: Any, degrees: bool = False, prec: fractions.Fraction = default_accuracy, limit: bool = True, digits: int | None = None, rounding: str = 'half_even', max_refinements: int | None = None) fractions.Fraction | decimal.Decimal[source]¶
Return the arc tangent of
x(radians, or degrees ifdegrees). See the module docstring for the type-preservation rule.
- httk.core.vectors.exactmath.atan2(y: Any, x: Any, degrees: bool = False, prec: fractions.Fraction = default_accuracy, limit: bool = True, digits: int | None = None, rounding: str = 'half_even', max_refinements: int | None = None) fractions.Fraction | decimal.Decimal[source]¶
Return the arc tangent of
y/xwithmath.atan2()quadrant conventions (radians, or degrees ifdegrees). See the module docstring for the type-preservation rule; a Decimal in either argument promotes the result (atan2(Decimal, Fraction)returns a Decimal).
- httk.core.vectors.exactmath.pi(prec: fractions.Fraction = default_accuracy, limit: bool = True, digits: int | None = None, rounding: str = 'half_even', max_refinements: int | None = None) fractions.Fraction | decimal.Decimal[source]¶
Return pi.
With no
digits=the Fraction contract holds (a rational withinprec,limitcontrolling the denominator);pi(digits=n)returns the correctly-rounded Decimal tonsignificant digits underrounding.