Groups | Search | Server Info | Keyboard shortcuts | Login | Register [http] [https] [nntp] [nntps]
Groups > de.comp.lang.php > #4435
| 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> |
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 | Next — Previous in thread | Next in thread | Find similar
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