Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [PHP]precyzyjne obliczenia matematyczne, float nie wystarcza
barthpl
post
Post #1





Grupa: Zarejestrowani
Postów: 142
Pomógł: 35
Dołączył: 5.12.2006
Skąd: Wrocław

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


szukam klasy do precyzyjnych obliczeń matematycznych takich na których normalny PHP'owy float się gubi - znacie coś (IMG:style_emoticons/default/questionmark.gif)
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 5)
Adiqus
post
Post #2





Grupa: Zarejestrowani
Postów: 28
Pomógł: 1
Dołączył: 27.01.2009

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


Teoretycznie nie powinien się PHP gubić, ponieważ zmienne automatycznie zmieniają typ, w zależności od wartości. Proponowałbym takie coś

  1. $a=3,3124153153125236262636346346567753573776355753656;
  2. $a=(double)$a;


(Double ma większy zakres liczbowy niż Float).

Ten post edytował Adiqus 10.12.2010, 12:08:24
Go to the top of the page
+Quote Post
poli25
post
Post #3





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

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


Może pobierasz liczby z bazy??
Go to the top of the page
+Quote Post
Noidea
post
Post #4





Grupa: Zarejestrowani
Postów: 226
Pomógł: 61
Dołączył: 20.08.2010

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


http://pl2.php.net/bcmath
Go to the top of the page
+Quote Post
barthpl
post
Post #5





Grupa: Zarejestrowani
Postów: 142
Pomógł: 35
Dołączył: 5.12.2006
Skąd: Wrocław

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


chodzi mi dokładnie o przeliczenia danych współrzędnych z postaci

E 17°01'02'' N 51°05'21''

na postać

17.022222222222 51.141666666667 (mój wynik)

17.0173637 51.0891868 (wynik z http://nieruchomosci.infor24.pl/lokalizator.php)


A ja liczę to tak:
  1. // float też nie działa
  2. $d = (double)$this->_pd; // stopnie
  3. $d += (double) 1 / (double) 60 * (double) $this->_pm; // minuty
  4. $d += (double) 1 / (double) 360 * (double) $this->_ps; // sekundy

lub tak
  1. bcscale( 1000 );
  2. $d = bcpow( $this->_pd, 1.0 );
  3. $d = bcadd( bcmul(bcdiv(1.0, 60.0), $this->_pm), $d );
  4. $d = bcadd( bcmul(bcdiv(1.0, 360.0),$this->_ps), $d );


różnica (w wyniku moim i oczekiwanym) jest i to znaczna, jakiś pomysł jak do tego podejść (IMG:style_emoticons/default/questionmark.gif)

Ten post edytował barthpl 10.12.2010, 13:31:14
Go to the top of the page
+Quote Post
Noidea
post
Post #6





Grupa: Zarejestrowani
Postów: 226
Pomógł: 61
Dołączył: 20.08.2010

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


Jeden stopień to 3600 sekund
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 - 01:50