Skip to content

ulpwise 0.3.2

Choose a tag to compare

@github-actions github-actions released this 06 Oct 01:57
· 11 commits to main since this release
  • Two regression corpus cases for pytorch #199850: torch.erf in bfloat16 and float16 on CPU returns 0 at and
    below 1.8e-7 and loses relative accuracy below 1e-3 (13404 bfloat16 ulps, 5 float16 ulps at worst), found with
    the half precision rows of ulpwise survey --functions erf --backends torch --dtypes f16,bf16.
  • Two regression corpus cases for pytorch #199867: torch.special.logit in float16 and bfloat16 on CPU rounds 1 - x
    and x / (1 - x) to the input dtype before the log, so logit(0.499756) in float16 is -0.000488 for an exact -0.000977
    (512 ulp, 64 bfloat16 ulp at worst), found with ulpwise survey --functions logit --backends torch --dtypes f16,bf16.
  • studies/accuracy-survey-2026-10-half: the second accuracy survey, torch 2.14.0+cpu in float16 and bfloat16 for the
    45 functions with half precision CPU kernels. 33 float16 and 34 bfloat16 rows of 45 are correctly rounded; erf
    (pytorch #199850) and logit (pytorch #199867) lose their digits before the rounding step, polygamma(2, x) in
    float16 is off at every half integer in (-1024, -256) because the Hurwitz zeta sum accumulates in float for the
    reduced types, and the activation tails and the rsqrt and i0e vector versus scalar disagreements of September
    show again.
  • ulpwise survey: the polygamma_1 and polygamma_2 references at a non positive integer are now the signed
    infinity of the pole, +inf for an odd order (the limit from both sides) and -inf for an even one (the sign of
    (-1) ** (n + 1) * n! * zeta(n + 1, x), which is what scipy, torch and jax return), instead of a domain error
    that expected nan. The f16 and bf16 grids reach the integers from 2048 and 256 up, so every negative point
    past there was a pole and counted as a nonfinite mismatch: on torch 2.14 the two functions had 354 of 3546
    float16 points and 492 of 4016 bfloat16 points each, polygamma_2 has 0 now in every dtype and polygamma_1
    keeps 491 bfloat16, 4 float32 and 2 float16 points where torch returns a large finite value instead of inf
    at a negative integer (pytorch #198663).