Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [PHP]Zamiast spodziwanego 0 mam 2.7755575615629E-17, proste operacje a wynik niespodziewany
Esper
post
Post #1





Grupa: Zarejestrowani
Postów: 4
Pomógł: 0
Dołączył: 7.01.2013

Ostrzeżenie: (0%)
-----


mam taką pętlę jak poniżej, spodziewałem się, że będzie zwracać same wartości z dokładnością do jednego miejsca po przecinku a tu zamiast zera mam 2.7755575615629E-17 co nie jest jednoznaczne z zerem. Z czego to wynika?
  1. $t=0.2;
  2. $energy_1 = 0;
  3. $energy_2 = 0;
  4. $cooldown_1 = 0;
  5. $cooldown_2 = 0;
  6. $charge_cooldown_1 = 3.3;
  7. $fast_energy_1 = 5;
  8. $fast_cooldown_1 = 0.5;
  9. while ($t<0.7){
  10. print "t przed ifami : $t cooldown_1: $cooldown_1</br></br>";
  11. if ($cooldown_1 <= 0.01) {
  12. if ($charge_energy_1 >= 100) {
  13. $cooldown_1 = $cooldown_1 + $charge_cooldown_1;
  14. }
  15. else {
  16. $cooldown_1 = $cooldown_1 + $fast_cooldown_1;
  17. $energy_1 = $charge_energy_1 + $fast_energy_1;
  18. }
  19. }
  20. $t=$t+0.1;
  21. $cooldown_1 = $cooldown_1-0.1;
  22. print "t: $t cooldown_1: $cooldown_1</br></br>";
  23. }


zwraca mi to następujące dane

t przed ifami : 0.2 cooldown_1: 0
t: 0.3 cooldown_1: 0.4
t przed ifami : 0.3 cooldown_1: 0.4
t: 0.4 cooldown_1: 0.3
t przed ifami : 0.4 cooldown_1: 0.3
t: 0.5 cooldown_1: 0.2
t przed ifami : 0.5 cooldown_1: 0.2
t: 0.6 cooldown_1: 0.1
t przed ifami : 0.6 cooldown_1: 0.1
t: 0.7 cooldown_1: 2.7755575615629E-17
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 3)
poli25
post
Post #2





Grupa: Zarejestrowani
Postów: 239
Pomógł: 20
Dołączył: 19.02.2010

Ostrzeżenie: (0%)
-----


spróbuj wszystkie dodawane wartości zaokrąglić funkcją round() np. round(cooldown_1 + $fast_cooldown_1,2)
Go to the top of the page
+Quote Post
Esper
post
Post #3





Grupa: Zarejestrowani
Postów: 4
Pomógł: 0
Dołączył: 7.01.2013

Ostrzeżenie: (0%)
-----


pomogło, ale czy to tak się powinno zawsze odbywać? liczyłem, że w przypadku takich operacji nie ma co myśleć o błędach związanych z dokładnością...
Go to the top of the page
+Quote Post
batman
post
Post #4





Grupa: Moderatorzy
Postów: 2 921
Pomógł: 269
Dołączył: 11.08.2005
Skąd: 127.0.0.1




Tutaj masz to ładnie wyjaśnione - https://secure.php.net/manual/en/language.types.float.php
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
2 Użytkowników czyta ten temat (2 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 23.08.2025 - 04:42