Module Sarek_interp.Sarek_float32

Constants

val max_float32 : float

Maximum representable float32 value (~3.4e38)

val min_positive_float32 : float

Minimum positive normalized float32 value (~1.17e-38)

val epsilon_float32 : float

Machine epsilon for float32 (~1.19e-7)

val max_exp_input : float

Maximum input for exp before overflow (~88.7)

Overflow Detection

type overflow_mode =
  1. | Silent
    (*

    Return infinity/-infinity silently (GPU behavior)

    *)
  2. | Warn
    (*

    Print warning but continue

    *)
  3. | Exception
    (*

    Raise exception

    *)
val set_overflow_mode : overflow_mode -> unit

Set how overflow/underflow is handled. Default is Silent.

exception Float32_overflow of string

Raised when overflow_mode is Exception and overflow occurs

exception Float32_underflow of string

Raised when overflow_mode is Exception and underflow occurs

Conversion

val to_float32 : float -> float

Truncate a float64 to float32 precision

val of_float : float -> float

Alias for to_float32 - convert float64 to float32

val of_int32 : int32 -> float
val to_int32 : float -> int32
val of_int : int -> float
val to_int : float -> int

Arithmetic

val add : float -> float -> float
val sub : float -> float -> float
val mul : float -> float -> float
val div : float -> float -> float
val neg : float -> float

Comparison

val (=) : float -> float -> bool
val (<>) : float -> float -> bool
val (<) : float -> float -> bool
val (>) : float -> float -> bool
val (<=) : float -> float -> bool
val (>=) : float -> float -> bool

Math Intrinsics

val exp : float -> float
val log : float -> float
val log10 : float -> float
val pow : float -> float -> float
val sqrt : float -> float
val rsqrt : float -> float

Reciprocal square root: rsqrt x = 1 / sqrt(x)

val sin : float -> float
val cos : float -> float
val tan : float -> float
val asin : float -> float
val acos : float -> float
val atan : float -> float
val atan2 : float -> float -> float
val sinh : float -> float
val cosh : float -> float
val tanh : float -> float
val floor : float -> float
val ceil : float -> float
val abs : float -> float
val fma : float -> float -> float -> float

Fused multiply-add: fma x y z = x * y + z

Min/Max with NaN handling

val min : float -> float -> float
val max : float -> float -> float
val clamp : float -> float -> float -> float

Predicates

val is_finite : float -> bool
val is_nan : float -> bool
val is_inf : float -> bool

Formatting

val to_string : float -> string

Sarek stdlib surface mirror

Every name declared by sarek/Sarek_stdlib/Float32.ml must exist here under exactly that spelling: the native backend copies the intrinsic name verbatim into Sarek.Sarek_cpu_runtime.Float32.<name>. Reconciled by sarek/tests/unit/test_intrinsic_surface.ml.

val abs_float : float -> float

Stdlib spelling of abs.

val minus : float -> float -> float

Stdlib spelling of sub.

val expm1 : float -> float
val log1p : float -> float
val hypot : float -> float -> float
val copysign : float -> float -> float
val fmod : float -> float -> float

C fmod: result has the sign of the dividend, magnitude < |divisor|.

val add_float32 : float -> float -> float
val sub_float32 : float -> float -> float
val mul_float32 : float -> float -> float
val div_float32 : float -> float -> float