Saturday, 21 March 2015

5.3.6.Decimal

Masalah utama pada type 'floating-point' adalah kepresisian angka, karena sedikit berbeda dengan apa yang kita harapkan, misalnya kita  mengkalkulasi angka 0,3:

  • >>> a=0.3
  • >>> b=0.9
  • >>> a+a+a-b
  • -1.1102230246251565e-16
  • >>> 
Pada perhitungkan diatas kita menginginkan penjumlahan dan perngurangan menghasilakan angka nol (0), tetapi hasil dari kalkulasi pyton berbeda, walaupun sangatlah kecil. Untuk mendapatkan kepresisian yang kita inginkan kita gunakan fungsi dari decimal.Decimal().

  • >>> import decimal
  • >>> a=decimal.Decimal('0.3')
  • >>> b=decimal.Decimal('0.9')
  • >>> a+a+a-b
  • Decimal('0.0')
  • >>> 
Pada baris pertama kita mengimpor semua fungsi yang ada dimodul decimal, baik yang kita perlukan maupun yang tidak kita perlukan, ini sama juga dengan kita mengimport modul 'math'. Kita balik dahulu ke import 'math' ya. Pada modul math ada yang namanya 'pi' yaitu 3.14... , ada fungsi sin(), cos(), sqrt() dan lain-lain. Nah semua fungsi itu akan dikenali oleh python bila kita panggil. Dan ini pemborosan memory, kita hanya ingin menggunakan satu fungsi saja, dan kita mengimport seluruh modul math. 

Ok balik lagi ke decimal. Tadi kita mengimport seluruh fungsi dari decimal, yang memboroskan memory, bila kita menggunakan komputer yang memorynya lebih dari 2 GB mungkin ga masalah, yang masalah bila kita menggunakan sebuah komputer yang memiliki memory 512 MB atau kurang seperti pada komputer rasberry pi, arduino, atau beagleboard, mungkin akan masalah. Sebaiknya kita mengeffisiensikan dan membiasakan mengimport sesuatu yang kita perlukan saja. 

Untuk mengimport fungsi Decimal dari modul decimal kita tulis (sebaiknya kita restart dahulu python IDLE nya dengan (ctrl + F6) ) 'from decimal import Decimal'.


  • >>> ============= RESTART ==============
  • >>> from decimal import Decimal
  • >>> 
Nah sekarang kita hanya memiliki fungsi Decimal dari modul decimal saja.

  • >>> a=Decimal('.3')
  • >>> b=Decimal('.9')
  • >>> a+a+a-b
  • Decimal('0.0')
  • >>> 
Dan kita hanya perlu menuliskan Decimal(' ') saja, tidak perlu decimal.Decimal(' '). Apabila kita menuliskan Decimal(0.3) tanpa tanda petik:

  • >>> a=Decimal(.3)
  • >>> b=Decimal(.9)
  • >>> a+a+a-b
  • Decimal('-5.551115123130313080847263336E-17')
Hehehe... kacau lagi. Ini juga sama disebabkan oleh kepresisiannya, Decimal memiliki tingkat kepresisian 28 digit (default). Sehingga tanpa kita sadari pada contoh diatas oleh python diterjemahkan memiliki 28 digit. Kita coba menset kepresisiannya

  • >>> from decimal import getcontext
  • >>> getcontext().prec=4
  • >>> Decimal(1)/Decimal(7)
  • Decimal('0.1429')
  • >>> getcontext().prec=2
  • >>> Decimal(1)/Decimal(3)
  • Decimal('0.33')
  • >>> 

No comments:

Post a Comment