2010-10-19 14 views

Odpowiedz

5

Zastosowanie: bcadd()

echo bcadd(10359023529, 0.2137582935, 10); 
3

To jest ograniczenie wartości zmiennoprzecinkowej. Wartość zmiennoprzecinkowa jest przechowywana jako współczynnik i wykładnik. Będziesz miał dużo precyzji z małymi liczbami i niską precyzją z dużymi liczbami. Oto więcej szczegółów niż chcesz: http://en.wikipedia.org/wiki/IEEE_754-2008

Dolna linia: wysokie wartości będą bardzo nieprecyzyjne. Spróbuj użyć małego zakresu wartości.

Oto więcej o zmiennoprzecinkowej precyzji szczególnie w odniesieniu do PHP: http://php.net/manual/en/language.types.float.php

Jeśli naprawdę potrzebujesz wysoką precyzję i wysokie numery, spojrzeć na naszą erą matematyki (http://www.php.net/manual/en/ref.bc.php) i GMP (http://www.php.net/manual/en/ref.gmp.php).

1

Istnieje jedna niejasna opcja w php.ini, która określa, ile cyfr znaczących ma być wyświetlanych podczas drukowania liczb zmiennoprzecinkowych. W moim przypadku wygląda to następująco

; The number of significant digits displayed in floating point numbers. 
; http://php.net/precision 
precision = 14 

Oczywiście to dotyczy tylko formatowania, nie fundamentalny fakt, że liczby zmiennoprzecinkowe są z natury nieprecyzyjne. Według IEEE 754 precyzja podwójna to 15.95 cyfr dziesiętnych.

+0

Precyzja wyników nie jest problemem; typ danych zmiennoprzecinkowych jest tylko tak dokładny. – meagar

+0

Co do zasady masz rację, ale w tym konkretnym przypadku nie przekroczył podwójnej precyzji. –

+0

@Adam Wierzę, że rzeczywiście tak zrobił; w przeciwnym razie jego implementacja została specjalnie ustawiona tak, aby wyświetlała tylko jedno miejsce po przecinku podczas wysyłania liczb zmiennoprzecinkowych, domyślnie 14. – meagar