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


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

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 15:52 +0100
Message-ID <4310540394.20181115155258@gmx.net> (permalink)
References <61959674.20181115012304@gmx.net> <g54o42FdnvgU1@mid.individual.net> <g54o8cFdnvgU2@mid.individual.net> <06371490.20181115143113@gmx.net> <psjtkk$rud$1@solani.org>

Show all headers | View raw


Christoph M. Becker am Donnerstag, 15. November 2018 (14:51):

> Am 15.11.2018 um 14:31 schrieb Stefan Mayer:

>> 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?

> Siehe <https://floating-point-gui.de/errors/comparison/>.

Cool, Danke. Das ist ja ein riesiges Thema.

"if( Math.abs(a-b) < 0.00001) // wrong - don't do this"
"if( Math.abs((a-b)/b) < 0.00001 ) // still not right!"

:-)


>> Alternative?

> Wenn es wirklich genau sein muss, und die Performance sekundär ist,
> würde ich das unter Umständen per BCMath[1] lösen.

> [1] <http://php.net/manual/de/book.bc.php>

Wow. Dessen war ich mir nicht bewußt. Das erscheint mir alles zu fett für meine
Fall. Aber auf alle Fälle hab ich was zu lesen.


> kommt aber natürlich darauf an, was du später mit diesen Werten tun willst.

Aus den Werten werden Daten für "select" Elemente im Frontend erzeugt. Der
Anspruch ist, alle Werte des Bereichs zu erstellen. Es geht nicht hauptsächlich
um die Zahlen selbst.

Neuer Versuch:

Die Funktion hat einen weiteren Schalter "zero". Der Wert "0" soll bei "false"
auslassen werden. Nun birgt ja ein Vergleich wie "0 ==(=) $value" genau das
gleiche Problem wieder.

Sehe ich das richtig, das Vergleiche $a>$b oder $a<$b zulässig sind?

Wenn ja, wäre es dann eine Lösung die Stellen, welche auf Gleichheit prüfen, in
Zeichenketten zu wandeln?

"(string)0.00" $value wird zu "0"
"(string)2.50"  $max"  wird zu "2.5"

Da kommt ja was sicheres zum Vergleichen raus, oder?

Beispiel:

Wieder funktioniert es scheinbar.

```php
function buildRange($min, $max, $step, $zero = true)
{
    $values = [];
    $value = $min;
    while ($value < $max || (string)$value === (string)$max) {
        if (false === $zero && '0' === (string)$value) {
            $value += $step;
            continue;
        }
        $values[] = $value;
        $value += $step;
    }
    return $values;
}
print_r(buildRange(-1, 1, .5, false));
print_r(buildRange(-1, 1, .5, true));
print_r(buildRange(5.3, 5.7, .4));
```

Ist das OK? Neue Probleme?


ciao, 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