Constants
Maximum representable float32 value (~3.4e38)
val min_positive_float32 : floatMinimum positive normalized float32 value (~1.17e-38)
val epsilon_float32 : floatMachine epsilon for float32 (~1.19e-7)
Maximum input for exp before overflow (~88.7)
Overflow Detection
type overflow_mode = | SilentReturn infinity/-infinity silently (GPU behavior)
| WarnPrint warning but continue
| Exception
Set how overflow/underflow is handled. Default is Silent.
exception Float32_overflow of stringRaised when overflow_mode is Exception and overflow occurs
exception Float32_underflow of stringRaised when overflow_mode is Exception and underflow occurs
Conversion
val to_float32 : float -> floatTruncate a float64 to float32 precision
val of_float : float -> floatAlias for to_float32 - convert float64 to float32
val of_int32 : int32 -> floatval to_int32 : float -> int32val of_int : int -> floatval to_int : float -> intArithmetic
val add : float -> float -> floatval sub : float -> float -> floatval mul : float -> float -> floatval div : float -> float -> floatComparison
val (=) : float -> float -> boolval (<>) : float -> float -> boolval (<) : float -> float -> boolval (>) : float -> float -> boolval (<=) : float -> float -> boolval (>=) : float -> float -> boolMath Intrinsics
val log10 : float -> floatval pow : float -> float -> floatval sqrt : float -> floatval rsqrt : float -> floatReciprocal square root: rsqrt x = 1 / sqrt(x)
val asin : float -> floatval acos : float -> floatval atan : float -> floatval atan2 : float -> float -> floatval sinh : float -> floatval cosh : float -> floatval tanh : float -> floatval floor : float -> floatval ceil : float -> floatval fma : float -> float -> float -> floatFused multiply-add: fma x y z = x * y + z
Min/Max with NaN handling
val min : float -> float -> floatval max : float -> float -> floatval clamp : float -> float -> float -> floatPredicates
val is_finite : float -> boolval is_nan : float -> boolval is_inf : float -> boolval to_string : float -> stringSarek 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 -> floatval minus : float -> float -> floatval expm1 : float -> floatval log1p : float -> floatval hypot : float -> float -> floatval copysign : float -> float -> floatval fmod : float -> float -> floatC fmod: result has the sign of the dividend, magnitude < |divisor|.
val add_float32 : float -> float -> floatval sub_float32 : float -> float -> floatval mul_float32 : float -> float -> floatval div_float32 : float -> float -> float