Arsip: Floating point overflow->compiler error?

 
user image
more 13 years ago

ir1keren

Gw bikin aplikasi yang ada looping ky gini:

for x := 0 to FVertex.Count - 1 do
    for i := 0 to FVertex.Count - 1 do
        FV[x,i]:=0.5*(1+tanh(fu[x,i]/Fu0));
[/code:1:8f43843cc2]
Fu gw definisikan sbg TDouble2D
type
  TDouble1D=array of Double;
  TDouble2D=array of TDouble1D;
Nah pas di-run muncul pesan error "Floating point overflow at 00403230". Trus gw lacak, nemu error muncul klo

Fu[x,i] = -12.278243687
dan

Fu0 = 0.001
Klo pake kalkulator angka2 Fu[x,i]/Fu0 hasilnya: -12278.243687 Nah iseng2 gw pengen tau bil. tsb tipenya (logikanya sih Double), aku trap pake: ShowMessage(VarTypeAsText(VarType(fu[x,i]/Fu0))); Muncul pesan "Double". Bener deh. Trus gw lacak ke fungsi tanh() yg didefinisikan di unit Math, isinya: [code:1:8f43843cc2] function Tanh(const X: Extended): Extended; begin if IsZero(X) then Result := 0 else Result := SinH(X) / CosH(X); end;
Nah X ternyata tipe-nya extended, yg range nilainya: -3.6 x 10^4951 .. 1.1 x 10^4932 (ukuran total 10 byte) Jadi seharusnya lebih besar dari double Iseng-iseng gw trace pake Evaluate/Modify (F7) masukin: tanh(-12278.243687) Eh, muncul pesan "Floating point overflow at 00403230". Gw pake Evaluate/Modify lg buat ngitung -12.278243687/0.001, hasilnya sama (dan normal-ga ada error), -12278.243687. Knp permasalahannya di fungsi tanh(), padahal parameternya bertipe extended ya?
user image
more 13 years ago

ir1keren

welehh..sepi..ato jg sama2 bingun ky aku? :lol:
user image
more 13 years ago

herux

Males mikir ah.....
user image
more 13 years ago

ichan29

@ir1keren: welehh..sepi..ato jg sama2 bingun ky aku? :lol:
@ir1keren: tidak selamanya apa yg dikau posting langsung bisa dijawab, coba baca dulu yg ada diperaturan forum ini, bisa aja mereka pd lg sibuk atau mungkin alasan2 yg lain.. jgn terlalu berharap, dan usaha adalah cara yg paling bagus, salah satunya dikau posting masalah ini disini [ini salah satu usaha dikau] [quote:198b4d2bbb="@herux"]: Males mikir ah.....[/quote:198b4d2bbb] klo menurutku lebih baik tdk usah coment drpd spt ini, takut menimbulkan salah penafsiran dari sang penanya.. kembali ke topik: coba lihat: FV[x,i]:=0.5*(1+tanh(fu[x,i]/Fu0)); sementara fungsi tanh jika nilai paramaneter tdk 0 akan meng-eksekusi spt ini: SinH(X) / CosH(X), lalu dikau coba dg cara Evaluate: -12.278243687/0.001 [ini menurut dikau tdk error] apakah nilai itu merupakan dr SinH dan CosH? bukannya nilai itu cuman nilai dr Fu dan Fu0? jadi itulah yg menyebabkannya.
user image
more 13 years ago

ichan29

FV[x,i]:=0.5(1+tanh(fu[x,i]/Fu0)); FV[x,i]:=0.5 (1+(SinH(-12.278243687/0.001)/CosH(-12.278243687/0.001)));
user image
more 13 years ago

ir1keren

@ichan29: klo menurutku lebih baik tdk usah coment drpd spt ini, takut menimbulkan salah penafsiran dari sang penanya..
maap deh, klo bikin salah penafsiran :oops: kbiasaan ngeblog..
@ichan29: FV[x,i]:=0.5(1+tanh(fu[x,i]/Fu0)); FV[x,i]:=0.5 (1+(SinH(-12.278243687/0.001)/CosH(-12.278243687/0.001)));
balik ke prmsalahan, gw ampe ribet trace ke unit2 laen, buka buku matematika :), akhirnya nemu permasalahannya.

function SinH(X:extended):extended;
begin
  result:=exp(x)-exp(-x);
end;
function CosH(x:extended):extended
begin
 result:=exp(x)+exp(-x);
end;
Nah pas eksekusi kan -12.278243687/0.001 = -12278.243687, trus exp(-12278.243687) = 0, dan exp(12278.243687) = error... Trus gw hitung pake calc.exe exp(12278.243687), hasilnya = 12278243687,e+0 ato Infinite Number.. :D Ternyata komp ga mampu ngitung eksponensial sgede itu :mrgreen: Nah developer delphi tu mengasumsikan TanH(x)=SinH(x)/CosH(x) ajah. Pdahal ada aturannya lagi, klo lebih besar dari 20, TanH me-return 1, klo lebih kecil dari -20, TanH me-return -1. Jadi gw bikin custom function:

function MyTanH(X:extended):extended;
var
    r1,r2 : extended ;
begin
  if x > 20.0
   then result := 1.0
  else if x < -20.0
   then result := -1.0
  else
   begin
    r1 := exp(x) ;
    r2 := exp(-x) ;
    result:= (r1 - r2) / (r1 + r2) ;
   end ;
end;
Eng-ing-eng..problem solved! Trnyata developer Delphi ga teliti! :mrgreen: Thx smuanya, n yg ngasih buku2 matematika!!!! 8)
user image
more 13 years ago

deLogic

Problem dan solusi Anda dapat Anda kirim ke QC (Quality Central) Embarcadero (dahulu Borland, CodeGear) di http://qc.embarcadero.com/wc/qcmain.aspx?p=10
more ...
  • Pages:
  • 1
Share to
Local Business Directory, Search Engine Submission & SEO Tools FreeWebSubmission.com SonicRun.com