Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: PHP błędne obliczenia
Forum PHP.pl > Forum > PHP
Morduk
Witam
Mam następujący problem z PHP. Oblicza mi błędnie działanie.
Skrypt:
  1. <?php
  2. echo 20930898*2+76561197960265728+1;
  3. ?>

Zwraca mi 76561198002127520, mimo iż w rzeczywistości to 76561198002127525.
Jak naprawić ten błąd?
melior
  1. <?php
  2. echo (20930898*2)+76561197960265728+1;
  3. ?>

Dodaj do tego nawias i będziesz miał pewność, że wszystko wykonuje się w odpowiedniej kolejności.
Crozin
@Up: Kolejność wykonywania działań ma się w najlepsze w PHP.

Problemem jest wielkość liczb. 76561197960265728 nie może być traktowana jako liczba całkowita ponieważ jest za duża (PHP nie ma typu long, który by pomieścił taką liczbę), a więc jest traktowana jako liczba zmiennoprzecinkowa:
  1. var_dump(76561197960265728); // float(7.65611979603E+16)
Liczby zmiennoprzecinkowe mają natomiast to do siebie, że potrafią utracić część danych (zarówno przy operacjach na dużych liczbach jak i ich części ułamkowej), co skutkuje takim właśnie zachowaniem.

Cytując za manualem:
Cytat
So never trust floating number results to the last digit, and never compare floating point numbers for equality. If higher precision is necessary, the arbitrary precision math functions and gmp functions are available.
http://www.php.net/manual/en/ref.bc.php
http://www.php.net/manual/en/ref.gmp.php


melior
Człowiek uczy się całe życie smile.gif

Jednak czemu w takiej sytuacji nawias rozwiązuje problem, skoro i tak część danych powinna być utracona?
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.