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.
endif ()

# Round-trip test for special floating-point values (NaN, +/- Inf, +/- zero).
# See the test definition lower in this file for the full description.

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

How about: "See the test definition below for the full description."?

# indices; the special values straddle both. The verdict comes from the
# program's exit code; no h5dump comparison is involved, so cross-platform
# NaN/Inf printf formatting cannot affect the result. TESTLIBDIR is
# already set by ADD_H5_UD_TEST above.

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Personally, I feel this section is kinda jammed and has too many semicolons. A bulleted list might help with readability.

#include "hdf5.h"
#include <stdint.h>
#include <stdio.h>
#include <string.h>

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Generally, standard header files should come first.

int r_f32 = 1, r_f64 = 1;

file_id = H5Fcreate(FILENAME, H5F_ACC_TRUNC, H5P_DEFAULT, H5P_DEFAULT);
if (file_id < 0) {

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I thought id should be checked against H5I_INVALID_HID instead of < 0, but when I looked in the code, it's not widely used...

ret = 0;

done:
if (dset_id >= 0)

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Should be > 0

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.

3 participants