Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [bcmath] bład liczenia
Forum PHP.pl > Forum > PHP
krzyszbi
mam następujący wzór :
v= -0.8+10^10^(w1- ((w1-w2) /(log(t1)-log(t2)))*(log(t1)-log(t3)));
gdzie w = log(log(v+0.8))

od strony php mam nastepująco
  1. <?php
  2. private function lepkosc ($w1,$w2,$t1,$t2,$t3){
  3. $w1 = log(log($w1 + 0.8));
  4. $w2 = log(log($w2 + 0.8));
  5. $t1 = $t1+273.15; // zamiana na kelwiny
  6. $t2 = $t2+273.15;
  7. $t3 = $t3+273.15;
  8. bcscale(10);
  9. $w3 = bcsub( $w1,bcmul( bcdiv( bcsub($w1,$w2), bcsub(log($t1),log($t2)) ),bcsub(log($t1),log($t3)) ) );
  10. return bcsub(bcpow(10,bcpow(10,$w3)),0.8);
  11. }
  12. ?>

lub
  1. <?php
  2. private function lepkosc ($w1,$w2,$t1,$t2,$t3){
  3. $w1 = log(log($w1 + 0.8));
  4. $w2 = log(log($w2 + 0.8));
  5. $t1 = $t1+273.15; // zamiana na kelwiny
  6. $t2 = $t2+273.15;
  7. $t3 = $t3+273.15;
  8. return (10 ^ ( 10 ^ ($w1- ( ($w1-$w2) / (log($t1)-log($t2)) ) * (log($t1)-log($t3)))))-0.8;
  9. }
  10. ?>


i zawsze zwraca mi błędny wynik
dla
w1 = 43,
w2= 6.4,
t1=313,
t2=373,
t3=589,
v3 powinno wyjść 0.638399828
a mi zawsze inaczej wychodzi
dla funkcji z bcmath wychodzi mi zawsze 0.20000
dla już cos innego ale nie poprawny wynik
może ja coś źle robie czy to może niedokładne liczenie php
nevt
w php znaczek ^ to nie operator potęgowania tylko opretor bitowy XOR
do potęgowania służy funkcja pow(), popraw w swoim kodzie:
  1. <?php
  2. return pow(10, pow(10, ($w1- ( ($w1-$w2) / (log($t1)-log($t2)) ) * (log($t1)-log($t3)))))-0.8;
  3. ?>

i u mnie zwraca 0.34098115221016 i to jest poprawny wynik dla danych które pokazałeś...
wiec albo masz błąd we wzorze, albo ktoś sie pomylił podając ten oczekiwany wynik...
krzyszbi
mam wzór z Exelu i tam wychodzi wynik jak podałem wyżej
a że ^ to nie wiedziałem ze nie test znacznikiem potęgo nawet nie sprawdziłem sad.gif
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.