Member baru? Bingung? Perlu bantuan? Silakan baca panduan singkat untuk ikut berdiskusi.

Welcome to Forum Sains Indonesia. Please login or sign up.

Juli 07, 2022, 02:16:21 AM

Login with username, password and session length

Topik Baru

Artikel Sains

Anggota
  • Total Anggota: 26,754
  • Latest: sainsftw
Stats
  • Total Tulisan: 139,633
  • Total Topik: 10,390
  • Online today: 38
  • Online ever: 441
  • (Desember 17, 2011, 09:48:51 AM)
Pengguna Online
Users: 0
Guests: 18
Total: 18

Aku Cinta ForSa

ForSa on FB ForSa on Twitter

tanya C : rounding error

Dimulai oleh cph, April 25, 2009, 09:50:46 AM

« sebelumnya - berikutnya »

0 Anggota dan 1 Pengunjung sedang melihat topik ini.

cph


#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)

Sky

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.

insan sains

belum pernah nyoba...

Ntar nyobain ah...  :D
Menuju Indonesia sebagai THE COUNTRY MASTER OF TECHNOLOGY, 2030