max/min return wrong value if signed (negative) zero
Dieses Issue hat noch niemand übernommen.
- Vorherrschende Sprache
- C
- Sterne
- 40.4k
- Forks
- 8.2k
- Ø Merge
- 2 T. 13 Std.
- Gemergte PRs (30 T.)
- 96
Beschreibung
Description
The following code:
https://3v4l.org/JXU4T#v8.4.13
<?php
var_dump( min( round( -0.01 / 2, 0 ), 0 ) );
var_dump( max( round( -0.01 / 2, 0 ), 0 ) );
Resulted in this output:
int(0)
float(-0)
But I expected this output instead:
float(-0)
int(0)
For 99.9% of applications, this output is actually what people would expect however: (instead of -0)
float(0)
int(0)
so I guess it would make sense to also change that.
This does not have any impact on calculations or comparisons, this is purely visual but can lead to unexpected behavior if the returned number is used as a string (e.g. substr, strtok,...) since there suddenly is an additional character in front of the numbers.
This is especially unexpected, when the float is the result of float arithmetics, which can minimally negative numbers in some cases
PHP Version
8.4
Operating System
No response
Beitragsleitfaden
Erste Schritte
- Lies das ganze Issue und danach den Beitragsleitfaden des Projekts.
- Schreib ins Issue, dass du es übernimmst — das erspart doppelte Arbeit.
- Forke das Repository und arbeite in einem Branch.
- Öffne einen Pull Request, der die Issue-Nummer nennt.
Rechercherichtung
Beginne damit, das verlinkte 3v4l-Beispiel unter PHP 8.4 zu reproduzieren, und verfolge dann die Einstiegspunkte von min() und max(), die signed zero verarbeiten. Bestimme, ob der beabsichtigte Fix -0 beibehält oder zu 0 normalisiert, und verifiziere das gewählte Verhalten mit einer Regressionstestabdeckung für die gemeldeten Aufrufe.
Vom Indexierungsmodell aus dem Issue-Text verfasst.
Bewertung
- Tech-Stack
- php
- Bereich
- backend
- Issue-Typ
- Bug
- Schwierigkeit
- 4/5
- Geschätzter Aufwand
- 3-5 Tage
- Aktivitätsstatus
- Ruhig
- Klarheit
- Größtenteils klar
- Anfängerfreundlichkeit
- 48/100