Numeric Boundary: 17 Significant Digits¶
A single-point GeoJSON whose coordinate needs 17 significant digits to round-trip. 17 digits is the number IEEE 754 doubles need in the worst case, and it is two more than the 15 the writer emits by default. The value is therefore expected to change on a text round-trip -- which is a documented limit, not a defect, and the case exists so a consumer can tell that limit apart from the 1e-14 class, which is a defect.
| Property | Value |
|---|---|
| Case ID | numeric_boundary_17_significant_digits |
| Category | vector |
| Format | GeoJSON |
| Geometry type | Point |
| CRS | EPSG:4326 |
| Location | 0.12°E, 51.00°N → 0.12°E, 51.00°N |
| Test tier | unit |
| Size class | tiny |
| Storage class | bundled |
| Redistributable | yes |
| Loader | geopandas |
| Status | validated |
Use this case¶
import pytest
@pytest.mark.geocase_case("numeric_boundary_17_significant_digits")
def test_numeric_boundary_17_significant_digits(geocase_case) -> None:
data = geocase_case.load()
assert data is not None
Use GeoCase in your tests¶
Install the complete set of vector, raster, and NetCDF dependencies:
What this case checks¶
Establish whether a text write/read cycle returns this coordinate unchanged. The expected answer ships with the case, so a consumer is graded rather than left to re-derive what "survived" means.
Risk types covered¶
failure_mode/reference_implementationprecision/formatter_boundaryprecision/roundtrip_degradationprecision/significant_digits
Expected behavior¶
| Assertion | Expected |
|---|---|
expect_loadable |
yes |
expect_valid_geometry |
yes |
expect_crs |
yes |
expected_epsg |
4326 |
expected_geometry_types |
Point |
expected_roundtrip_coordinates |
[0.12345678901234568, 51.0] |
Notes¶
The property¶
The single point in this file needs 17 significant digits to round-trip:
| value | shortest round-trip repr | |
|---|---|---|
| x | 0.12345678901234568 |
0.12345678901234568 |
| y | 51.0 |
51.0 |
One feature, one property. Plan 40's control principle: if a consumer fails this case and passes its siblings, the failure names the property.
Why this value¶
17 digits is the number IEEE 754 doubles need in the worst case, and it is two more than the 15 the writer emits by default. The value is therefore expected to change on a text round-trip -- which is a documented limit, not a defect, and the case exists so a consumer can tell that limit apart from the 1e-14 class, which is a defect.
What to assert¶
assertions.expected_roundtrip_coordinates carries the pair the file holds.
Write the case out in your own format, read it back, and compare against that
field rather than against a tolerance you chose:
import geocase
meta = geocase.get_case("numeric_boundary_17_significant_digits")
expected = meta.assertions.expected_roundtrip_coordinates
A tolerance hides the failure this family exists to find -- GDAL
d6fd56f52d writes 1e-14 as 0, and every tolerance loose enough to be
"reasonable" for a coordinate near zero passes that silently.
Provenance¶
Plan 44 phase 2, from the 2026-09-06 run against GDAL d6fd56f52d. See
docs/plans/44-gdal-as-target-and-the-numeric-axis.md.
Required capabilities¶
loadgeometry-validationcoordinate-precision-check
Files¶
- Primary:
numeric_boundary_17_significant_digits.geojson - Notes:
notes.md
Source and license¶
- Source: geocase-synthetic
- License: MIT
Tags¶
geojson numeric_boundary precision single_variable vector
Related cases¶
- Numeric Boundary: 15 Significant Digits --
numeric_boundary_15_significant_digits - Numeric Boundary: 1e-15 --
numeric_boundary_1e15 - Numeric Boundary: 1e-13 --
numeric_boundary_1e13 - Numeric Boundary: 1e-14 --
numeric_boundary_1e14 - Numeric Boundary: Trailing Nines --
numeric_boundary_trailing_nines