Forum Sains Indonesia

Ilmu Terapan => Pemrograman => Ilmu Komputer => Bahasa C/C++ => Topik dimulai oleh: cph pada April 26, 2009, 12:50:46 AM

Judul: tanya C : rounding error
Ditulis oleh: cph pada April 26, 2009, 12:50:46 AM
Kode: [Pilih]
#include <math.h>
#include <stdio.h>

/* http://goldennumber.net/five(5).htm */
#define PHI      pow(M_E, asinh(0.5))

/* http://goldennumber.net/five(5).htm */
double fib (unsigned int n)
{
  return((pow(PHI, (double)n)) / sqrt(5.0));
}

int main (void)
{
  int x;

  for (x = 0; x < 100; ++x) {
    printf("%40.0f\tx=%d\n", fib(x), x);
  }

  return(0);
}
fungsi fib() memberikan nilai balik berupa bilangan fibonacci ke-n.
fungsi main() berisi looping yg akan mencetak bilangan fibonacci ke-0 sampai ke-99.
permasalahan muncul pada saat x=71 d mana fungsi fib() memberikan hasil yg salah (tidak memenuhi hukum f[n] = f[n-1] + f[n-2]), kesalahan jg terjadi pada saat x=76 dan setelah x=79.

sprtinya permasalahan floating point error / rounding error, ada yg bisa bantu dlm hal ini?

PS : tolong jgn beri usulan soal penggunaan "recursion" (lambat & bs bikin stack overflow alias hang), atau "tail recursion" (agak lbh cpt dr pd recursion, tp tetep aja recursion)
Judul: Re: tanya C : rounding error
Ditulis oleh: Sky pada April 26, 2009, 07:44:26 AM
ya... kelemahan pake floating point emang gitu.
Selalu ada rounding error.
Kita ga bisa menghindari yang seperti itu.

Memang kalo pake recursion super lambat deh.
Tapi pake perulangan biasa cukup mantap ko.

Saya juga pernah nyoba, pas di 76 hasilnya ga sesuai.
Tapi pake perulangan bagus-bagus aja.
Judul: Re: tanya C : rounding error
Ditulis oleh: insan sains pada Mei 17, 2009, 07:52:40 AM
belum pernah nyoba...

Ntar nyobain ah...  :D