Groups | Search | Server Info | Keyboard shortcuts | Login | Register [http] [https] [nntp] [nntps]


Groups > de.comp.lang.php > #4433

Re: var_dump(8.7 <= 8.7) / false?

From Stefan Mayer <meniskus@gmx.net>
Newsgroups de.comp.lang.php
Subject Re: var_dump(8.7 <= 8.7) / false?
Date 2018-11-15 14:31 +0100
Message-ID <06371490.20181115143113@gmx.net> (permalink)
References <61959674.20181115012304@gmx.net> <g54o42FdnvgU1@mid.individual.net> <g54o8cFdnvgU2@mid.individual.net>

Show all headers | View raw


Arno Welzel am Donnerstag, 15. November 2018 (09:15):

> Arno Welzel:

>> Stefan Mayer:
>> 
>>> Hallo Leute,
>>>
>>> eine kleine Funktion die Werte zwischen "min" und "max"
>>>
>>> ```
>>> <?php
>>> function f($min, $max, $step) {
>>>     $values = [];
>>>     for ($i = $min; $i<=$max; $i+=$step) {
>>>         $values[] = $i;
>>>     }
>>>     return $values;
>>> }
>>> ```
>>>
>>> Eigentlich dachte ich das funktioniert, aber irgendwas funktioniert überhaupt
>>> nicht.
>>>
>>> Wieso unterscheidet sich das Ergebnis z.B. bei diesen beiden?
>>>
>>> print_r(f(11.3, 11.7, .4)); // 11.7 fehlt
>>> print_r(f(20.3, 20.7, .4)); // OK
>> 
>> 
>> Fließkommazahlen für Vergleiche zu benutzen, ist generell problematisch.
>> 
>> Siehe auch:
>> 
>> <https://stackoverflow.com/questions/3148937/compare-floats-in-php>
>> 
>> Zitat:
>> 
>> "If you do it like this they should be the same. But note that a
>> characteristic of floating-point values is that calculations which seem
>> to result in the same value do not need to actually be identical. So if
>> $a is a literal .17 and $b arrives there through a calculation it can
>> well be that they are different, albeit both display the same value.
>> 
>> Usually you never compare floating-point values for equality like this,
>> you need to use a smallest acceptable difference:
>> 
>> if (abs(($a-$b)/$b) < 0.00001) {
>>   echo "same";
>> }
>> 
>> Something like that."

> Ingrid weist mich noch darauf hin, dass das auch in der Dokumentation
> von PHP erwähnt ist:

> <http://php.net/manual/en/language.types.float.php>


Ja, Danke. Mittlerweile bin ich darauf auch gestoßen. Autsch.

Wie löse ich den nun den Vergleich der Werte? Durch das einbauen der "kleinen
Unterscheidung" in meine Funktion?

Das sähe so aus. Und funktioniert scheinbar.

```
function f($min, $max, $step)
{
    $values = [];
    $value = $min;
    while ($value <= $max || (abs(($value-$max)/$max) < 0.00001)) {
        $values[] = $value;
        $value+=$step;
    }
    return $values;
}
print_r(f(8.3, 8.7, .4));
print_r(f(10.3, 10.7, .4));
```

Gibt es daran etwas auszusetzen?  Alternative?

Danke und tschüss,
Stefan



Back to de.comp.lang.php | Previous | NextPrevious in thread | Next in thread | Find similar


Thread

var_dump(8.7 <= 8.7) / false? Stefan Mayer <meniskus@gmx.net> - 2018-11-15 01:23 +0100
  Re: var_dump(8.7 <= 8.7) / false? Arno Welzel <usenet@arnowelzel.de> - 2018-11-15 09:12 +0100
    Re: var_dump(8.7 <= 8.7) / false? Arno Welzel <usenet@arnowelzel.de> - 2018-11-15 09:15 +0100
      Re: var_dump(8.7 <= 8.7) / false? Stefan Mayer <meniskus@gmx.net> - 2018-11-15 14:31 +0100
        Re: var_dump(8.7 <= 8.7) / false? "Christoph M. Becker" <cmbecker69@arcor.de> - 2018-11-15 14:51 +0100
          Re: var_dump(8.7 <= 8.7) / false? Stefan Mayer <meniskus@gmx.net> - 2018-11-15 15:52 +0100
            Re: var_dump(8.7 <= 8.7) / false? "Christoph M. Becker" <cmbecker69@arcor.de> - 2018-11-15 17:36 +0100
              Re: var_dump(8.7 <= 8.7) / false? Stefan Mayer <meniskus@gmx.net> - 2018-11-15 18:02 +0100
              Re: var_dump(8.7 <= 8.7) / false? Stefan Mayer <meniskus@gmx.net> - 2018-11-15 21:24 +0100
                Re: var_dump(8.7 <= 8.7) / false? "Christoph M. Becker" <cmbecker69@arcor.de> - 2018-11-16 14:43 +0100
                Re: var_dump(8.7 <= 8.7) / false? Stefan Mayer <meniskus@gmx.net> - 2018-11-16 21:26 +0100
                Re: var_dump(8.7 <= 8.7) / false? "Christoph M. Becker" <cmbecker69@arcor.de> - 2018-11-17 23:49 +0100
                Re: var_dump(8.7 <= 8.7) / false? Stefan Mayer <meniskus@gmx.net> - 2018-11-19 21:15 +0100
        Re: var_dump(8.7 <= 8.7) / false? Claus Reibenstein <4spamersonly@kabelmail.de> - 2018-11-15 19:34 +0100
          Re: var_dump(8.7 <= 8.7) / false? Stefan Mayer <meniskus@gmx.net> - 2018-11-15 21:06 +0100
  Re: var_dump(8.7 <= 8.7) / false? Stefan Mayer <meniskus@gmx.net> - 2018-11-15 09:13 +0100
    Re: var_dump(8.7 <= 8.7) / false? "Christoph M. Becker" <cmbecker69@arcor.de> - 2018-11-15 12:22 +0100
  Re: var_dump(8.7 <= 8.7) / false? "Peter J. Holzer" <hjp-usenet3@hjp.at> - 2018-11-17 20:55 +0100
    Re: var_dump(8.7 <= 8.7) / false? Stefan Mayer <meniskus@gmx.net> - 2018-11-19 20:52 +0100

csiph-web