float32 refuses a value that should saturate to an infinity
Dieses Issue hat noch niemand übernommen.
Bewertung
- Schwierigkeit
- 2/5
- Geschätzter Aufwand
- 1-3 Stunden
- Anfängerfreundlichkeit
- 75/100
Rechercherichtung
Beginne beim compact_encoding.float32-Encoder und reproduziere den compact-encoding-test-Korpusfall namens float32-overflow, und vergleiche ihn mit dem im Issue beschriebenen struct.pack-Verhalten. Fertig bedeutet, dass das Kodieren von 4e38 keinen OverflowError mehr auslöst und die Referenzbytes 0000807f erzeugt, während der Conformance-Fall besteht.
Vom Indexierungsmodell aus dem Issue-Text verfasst.
Beschreibung
Found by running the compact-encoding-test conformance corpus against this port.
float32 refuses a value too large for binary32 instead of saturating to an infinity:
import compact_encoding as c
c.encode(c.float32, 4e38) # OverflowError: float too large to pack with f format
The reference writes 0000807f, which reads back as infinity. That is what IEEE 754 round-to-nearest gives when a double is narrowed to binary32 and the result is out of range, so the reference's behaviour is the standard one here rather than a quirk.
The cause looks like struct.pack surfacing rather than a decision:
import struct
struct.pack('<f', 4e38) # OverflowError: float too large to pack with f format
The corpus case is float32-overflow, citing float-overflows-to-an-infinity: "a value too large for the width becomes an infinity rather than a refusal, so float32 writes 4e38 as 0000807f and loses it. A float codec refuses no number it is given: what the width cannot hold it rounds, and what the width cannot reach becomes an infinity."
- Vorherrschende Sprache
- Python
- Sterne
- 1
- Forks
- 1
- PR-Merge-Kennzahlen
- Keine gemergten PRs in 30 T.
Entwicklungsumgebung
Dieses Projekt bietet weder Dev-Container noch Dockerfile noch Beitragsleitfaden – die Einrichtung liegt bei Ihnen. Beginnen Sie mit der README; die allgemeinen Schritte stehen in unserem Leitfaden für den ersten Beitrag.
Erste Schritte
- Lesen Sie das ganze Issue und danach den Beitragsleitfaden des Projekts.
- Schreiben Sie ins Issue, dass Sie es übernehmen — das erspart doppelte Arbeit.
- Forken Sie das Repository und arbeiten Sie in einem Branch.
- Öffnen Sie einen Pull Request, der die Issue-Nummer nennt.
Mehr aus holepunchto/compact-encoding-python
-
Schwierigkeit 2/5 1-3 Stunden Anfängerfreundlichkeit 74/100
-
Schwierigkeit 3/5 1-2 Tage Anfängerfreundlichkeit 75/100
Alle Issues in holepunchto/compact-encoding-python
Ähnliche Issues
-
Deferred from #1869: Complete the companion pytest guardrail update noted in the PR description...Offen
Schwierigkeit 1/5 Unter einer Stunde Anfängerfreundlichkeit 95/100
Maintainer antworten meist innerhalb von 1 Tag
-
Schwierigkeit 2/5 1-3 Stunden Anfängerfreundlichkeit 88/100
NousResearch/hermes-agent#140958 ·
Maintainer antworten meist innerhalb von 1 Tag
-
Bug triage/confirmed
Schwierigkeit 2/5 Ein halber Tag Anfängerfreundlichkeit 85/100
agentscope-ai/agentscope#3355 ·
Maintainer antworten meist innerhalb von 2 Tagen
-
Schwierigkeit 1/5 Unter einer Stunde Anfängerfreundlichkeit 95/100
ethereum/execution-specs#3859 ·
Maintainer antworten meist innerhalb von 1 Tag
-
Schwierigkeit 2/5 1-3 Stunden Anfängerfreundlichkeit 78/100
Maintainer antworten meist innerhalb von 1 Tag