Wpis z mikrobloga

Mirki, zagadka...
W żadnej wersji PHP nie wykonuje się ten if na tych liczbach :)
Rozwaliło mi to ostatnio mózg przy analizie błędu w pewnym kodzie raportu klienta, myślałem że starość mnie dopadła ale jednak w żadnym sanboxie (w żadnej wersji php ten kod nie działa)

#programowanie
  • 16
świetnie ale na innych liczbach działa (wymyślonych) a tylko póki co na tych nie, nawet var dump pokazuje że to są te same wartości i te same typy a jednak nie działa. czary.


@zbyszek_kieliszek: przeczytaj/obejrzyj to co podesłałem to zrozumiesz dlaczego na niektórych wartościach działa a na innych nie. To ma związek z tym w jaki sposób liczby zmiennoprzecinkowe są przechowywane w systemie dwójkowym.
zgadzam się że to błąd na liczbach zmiennoprzecinkowych, problem w tym że nawet var dump tego nie pokazuje


@zbyszek_kieliszek: nie wiem jak działa var_dump, ale normalnym języku programowania( ͡° ͜ʖ ͡°) można to normalnie wyświetlić (patrz screen). Może ta funkcja var_dump ma w sobie zaimplementowane coś co przewiduje ten błąd i wyświetla zgodnie z intuicją.

chodź dziwne jest to że na innych liczbach zmiennoprzecinkowych działa.


No
rockip - > zgadzam się że to błąd na liczbach zmiennoprzecinkowych, problem w tym że ...

źródło: comment_1667994644OTFOB0kthSjAumlWtm3LmO.jpg

Pobierz
@rockip: Do C++/C to php nie ma co porównywać :) Natomiast w wersji 8 pokazuje inaczej var dump. Tak wiem że są takie dziwne rzeczy ale zdziwiło mnie to że var dump nic nie pokazał u klienta na serwerze jest php 7.X, patrzyłem na sandboxie wszystkie wersje <= 7.X
@zbyszek_kieliszek: tu coś masz o tym napisane: https://www.php.net/manual/en/language.types.float.php

To zdanie jest ważne:

So never trust floating number results to the last digit, and do not compare floating point numbers directly for equality. If higher precision is necessary, the arbitrary precision math functions and gmp functions are available.


Czyli PHP ma jakieś specjale funkcje, których powinieneś użyć w Twoim przypadku: https://www.php.net/manual/en/ref.bc.php

O, nawet masz tu: https://floating-point-gui.de/languages/php/