Pages

Thursday, February 9, 2012

2^3^4 = ...? Gunakan ()

Apa yang membedakan kalkulator pintar dengan kalkulator murahan?  Barangkali anda bisa mencoba menghitung "1+2*3".  Bila hasilnya 9 [=(1+2)*3], itu kalkulator murahan, karena belum bisa membedakan preseden operator aritmetik.  Bila hasilnya 7, anda patut bersyukur karena memiliki kalkulator pintar yang bisa membedakan hirarki operator aritmetik, yakni (dari tinggi ke rendah): 1) kurung: ( ), 2) pangkat: ^, 3) kali, bagi: *, /, 3) tambah, kurang: +, -

Tapi pernahkah anda berpikir bagaimana sifat keasosiatifan operator pangkat, "^"?  Inilah yang membuat gundah JerWei Zhang, seorang pengguna Google+, yang mencoba mengevaluasi 2^3^4 (${2^{3^4}}$) pada berbagai software komputasi.  Hasilnya?  TIDAK KONSISTEN!

Bisa ditebak, ada dua kelompok output, yaitu:
  1. asosiatif kiri: 2^3^4 = (2^3)^4 = 4096
  2. asosiatif kanan: 2^3^4 = 2^(3^4) = 2 417 851 639 229 258 349 412 352
Saya mencoba mengevaluasinya pada beberapa software/sistem dengan hasil sebagai berikut.
  1. Asosiatif kiri
  2. Matlab (R2008b), MS Excel (2010), Google Spreadsheet
  3. Asosiatif kanan
  4. Mathematica (8.0), Maple (15), R (2.13.0), Scilab (5.3.3), Scientific WorkPlace (5.5), Phyton (3.2.2, 2**3**4), Google Search Engine, Yahoo Search Engine
Tampaknya lebih banyak yang menggunakan sifat asosiatif kanan.  Alasan "^" dikategorikan sebagai asosiatif kanan dapat dilihat di http://en.wikipedia.org/wiki/Associative_property pada bagian "Notation for non-associative operations".  Namun pelajaran paling penting dari kasus ini adalah betapa pentingnya lambang kurung dalam komputasi karena dia merupakan preseden aritmetik tertinggi.  Artinya, anda akan aman menuliskan (2^3)^4 ataukah 2^(3^4) di sistem manapun.  Kerancuan ini juga tidak akan terjadi pada bahasa pemrograman seperti C, PHP yang menggunakan perintah dengan dua argumen, pow(x, y), yang akan menghasilkan x^y.

0 comments:

Post a Comment