Skip to content

Port netcdf c 3093#260

Open
ajelenak wants to merge 3 commits into
masterfrom
port-netcdf-c-3093
Open

Port netcdf c 3093#260
ajelenak wants to merge 3 commits into
masterfrom
port-netcdf-c-3093

Conversation

@ajelenak

Copy link
Copy Markdown
Contributor
  • Port netcdf-c PR #3093 -- all quantization loops in ccr_bgr() and
    ccr_gbr() now skip ±0.0 and NaN.
  • Include also ±Inf.
  • Tests for these special values.

ajelenak and others added 3 commits June 9, 2026 22:18
Port netcdf-c PR #3093 -- all quantization loops in ccr_bgr() and
ccr_gbr() now skip ±0.0 and NaN via (val != 0.0 && !isnan(val)),
superseding the bit-pattern u*_ptr[idx] != 0U checks that only caught
+0.0. The has_mss_val == 0 fallback now uses NaN as a no-op sentinel
(NC_FILL_FLOAT/DOUBLE macros dropped).
The loop bodies have well-defined behavior only for finite inputs:
BitRound's per-value bit-shift becomes an out-of-range shift on ±Inf
(undefined behavior), and BitGroom's loop turns ±Inf bit patterns
into NaN by ORing low mantissa bits. Both guards now use isfinite(val)
instead of !isnan(val) to block ±Inf in addition to NaN. New h5filter_specials_{bitround,bitgroom} round-trip tests
write NaN, ±Inf, ±0.0, and normal values via H5Pset_filter, read back,
and assert in C that the special values pass through unchanged while
at least one normal value was quantized.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants