Angka Yang Mengambang

floating Tulisan ini bertujuan menanggapi artikel Bernaridho I. Hutabarat (BIH), rubrik Opini PC edisi 05/2009. Secara keseluruhan artikel tersebut membingungkan dan berisi opini yang dapat menyesatkan. Judul besar “128-bit, 256-bin, …: Untuk Apa?” ternyata tidak terjawab hingga akhir tulisan.

Sebenarnya apa yang dimaksud 16-bit, 32-bit, 64-bit, dst, dalam prosesor? Secara umum adalah besarnya register (memory internal) di prosesor tersebut. Semakin besar register berakibat semakin besar unit data yang dapat diolah dan alamat memory eksternal yang dapat dijangkau. Bila bilangan bulat (integer) di 16-bit maksimal adalah 65536 (unsigned), maka di 32-bit adalah 4294967296(unsigned). Begitu pula alamat memory.

Di artikel tersebut disinggung (secara guyon) bahwa bit besar identik dengan kecepatan. Memang tidak selalu, karena data yang lebar tidak otomatis membuat kecepatan prosesor bertambah. Bit yang sedikit, misalnya 16-bit, pun bisa juga mengolah integer berukuran 32-bit, menggunakan 2 register. Hingga pada akhirnya orang sepakat 1 hal: ruang alamat lebih besar. Memang ada pula trik mengakali ini, misalnya Page Address Extension (PAE), tapi sifatnya tidak dominan. Sayangnya memory lebih besar sama sekali tidak tersentuh di artikel itu.

Lalu dibahas tentang floating point yang exact. Sulit dimengerti bahwa floating point (angka titik mengambang) bisa dinyatakan secara tepat, meskipun dengan pangkat –27. Contohnya 1/3, itu angka pastinya berapa? Bila ada angka yang merepresentasikan dengan tepat, namanya bukan lagi floating point, tapi integer. Menggunakan BCD juga tidak membantu, karena operasi matematika yang menghasilkan pecahan, tidak akan bisa menjadi angka pasti, kecuali dilakukan pembulatan.

Compiler dalam menyatakan suatu konstanta, misal 0.1, akan menyesuaikan dengan kapasitas type data. Misalnya type single (32-bit) adalah1.5 x 10^-45 s/d 3.4 x 10^38, dengan ketepatan (precision) 8 digit di belakang koma. Adalah penyimpangan (abuse) bila type single-precision dinyatakan 9 digit, sehingga BIH menyebutkan 0.10000000149012345. Masalah konstanta ini perlu dipahami secara benar, karena bisa terjadi kesalahan pembulatan (rounding error) pada operasi berbeda type, misalnya single-precision dan double-precision.

BIH juga kehilangan fokus, karena dalam suatu paragraf menyatakan single-precision adalah 32-bit, beserta contoh konstanta 0.1, tapi di paragraf lain menyatakan Intel mengimplementasikan 10-byte (80-bit), dengan konstanta yang sama. Padahal, 0.1 dalam bentuk 80-bit adalah 0.10000000000000000000 (20 digit di belakang koma, sesuai spesifikasi). Bagaimana bila dibuat 67 digit? Bisa, tapi isinya ngawur (kecuali memang tujuannya juga ngawur).

Dulu ketika Intel membuat prosesor, misalnya 8086 (x86), tidak secara otomatis dilengkapi dengan math-coprocessor, atau 8087 (x87). Pemisahan ini berakhir saat Intel meluncurkan Pentium, yang juga berisi math-co di dalamnya. Dengan demikian, lebar data (16, 32, 64, dst) pada prosesor tidak identik dengan lebar data pada math-co. Bagi mereka yang mengerti assembly tentu paham, bahwa operand floating point disimpan di stack atau memory, bukan register. Sehingga cukup rancu, apakah bit dalam artikel adalah prosesor ataukah math-co.

Sempat disinggung pula floating point untuk kalangan finansial. Dalam suatu bahasa, misalnya Delphi, disediakan suatu type khusus untuk ini, yaitu Currency. Pecahannya 4 desimal di belakang koma, tapi dijamin terbebas dari kesalahan pembulatan. Apakah di AS harus 5 desimal? Saya kurang tahu. Namun instruksi dalam type Currency ini didukung oleh perangkat keras (math-co) dan dilakukan seperti instruksi bilangan bulat. Sehingga bisa dinyatakan 0.1 = 1000, 0.01 = 100, 0.001 = 10 dan 0.0001 = 1. Berapa 0.1234? 1234.

Lalu mengenai 1 byte = 9-bit. Saya tidak mengerti di mana lebihnya, tapi ide ini sangat aneh sekaligus terbelakang. Menurut sejarah, 9-bit byte pernah digunakan di era 1950 s/d 1960-an, misalnya UNIVAC dan IBM PDP-10. Namun sejak 1956, dengan munculnya IBM S/360, 8-bit byte menjadi standar hingga saat ini.. Lagipula 9-bit itu bukan kelipatan 2, mengapa tidak menjadi 16-bit saja ? Bila 9-bit dianggap lebih baik, 16-bit akan lebih superior.

Pada dasarnya apa yang ada di math-co sekarang sudah mencukupi secara umum, yaitu 80-bit floating point. Bila hal ini tidak terpenuhi, tentu ada jalan keluar, yaitu emulasi melalui perangkat lunak. Contohnya untuk bahasa Pascal, ada unit BigFloat yang mampu mengolah angka pecahan sangat besar dan representasi angka dalam bentuk string (sehingga tidak terjadi salah konversi). Kembali ke soal di atas, apakah 1/3 dapat dinyatakan secara tepat? Ternyata dengan BigFloat sekalipun, pada digit ke 67 mulai terjadi disharmoni (menjadi …3333177…). So, sekali float tidaklah bisa menjadi exact.

Akhirul kata, tampaknya BIH perlu banyak merujuk pada referensi yang ada, tidak sekedar membuat ide yang kontroversial. Ilmu komputer bukanlah karya sastra, perlu kajian yang mendalam dan ilmiah. Kebebasan berpendapat tentu tidak bijak bila membuat kesesatan pada pembaca. Demikian semoga bermanfaat.

Lihat Scan Majalah

34 Komentar »

  1. Bernaridho said

    Kam, 7 Mei 2009 pada 04:06:56 • Disimpan dalam Ilmu Komputer, Teknologi Informasi •yang berkaitan pc media

    Tulisan ini bertujuan menanggapi artikel Bernaridho I. Hutabarat (BIH), rubrik Opini PC edisi 05/2009. Secara keseluruhan artikel tersebut membingungkan dan berisi opini yang dapat menyesatkan. Judul besar “128-bit, 256-bin, …: Untuk Apa?” ternyata tidak terjawab hingga akhir tulisan.

    —– Start Paragraf tanggapan dari Bernaridho
    Jawaban: konteks tulisan saya adalah tentang akurasi representasi pecahan desimal. Implisit pada akhir tulisan saya memberi jawaban bahwa 128-bit, 256-bit, bahkan 512-bit tidak berguna untuk memberi pecahan desimal yang eksak. 128-bit, 256-bit dan seterusnya mungkin berguna untuk kecepatan komputasi, tapi tidak berguna untuk akurasi desimal yang eksak.
    —– Stop Paragraf tanggapan dari Bernaridho

    Sebenarnya apa yang dimaksud 16-bit, 32-bit, 64-bit, dst, dalam prosesor? Secara umum adalah besarnya register (memory internal) di prosesor tersebut. Semakin besar register berakibat semakin besar unit data yang dapat diolah dan alamat memory eksternal yang dapat dijangkau. Bila bilangan bulat (integer) di 16-bit maksimal adalah 65536 (unsigned), maka di 32-bit adalah 4294967296 (unsigned). Begitu pula alamat memory.

    —– Start Paragraf tanggapan dari Bernaridho
    Ukuran-ukuran tersebut terutama tidak tentang ukuran register, tapi terutama tentang ukuran bus data. Contoh: ukuran register floating-point di stack pada prosesor Intel tetap 80-bit. Tapi toh Intel hanya menyatakan 8-bit, 16-bit, 32-bit, dan 64-bit computing; tidak pernah 80-bit computing. Intel menyebut 8-bit … 64-bit itu terutama mengacu kepada ukuran data bus; karena ada register-register yang tidak pada ukuran-ukuran tersebut.
    —– Stop Paragraf tanggapan dari Bernaridho

    Di artikel tersebut disinggung (secara guyon) bahwa bit besar identik dengan kecepatan. Memang tidak selalu, karena data yang lebar tidak otomatis membuat kecepatan prosesor bertambah. Bit yang sedikit, misalnya 16-bit, pun bisa juga mengolah integer berukuran 32-bit, menggunakan 2 register. Hingga pada akhirnya orang sepakat 1 hal: ruang alamat lebih besar. Memang ada pula trik mengakali ini, misalnya Page Address Extension (PAE), tapi sifatnya tidak dominan. Sayangnya memory lebih besar sama sekali tidak tersentuh di artikel itu.

    —– Start Paragraf tanggapan dari Bernaridho
    Apa yang ingin Anda katakan? Tidak jelas nalar dari paragraf Anda ini.
    —– Stop Paragraf tanggapan dari Bernaridho

    Lalu dibahas tentang floating point yang exact. Sulit dimengerti bahwa floating point (angka titik mengambang) bisa dinyatakan secara tepat, meskipun dengan pangkat –27. Contohnya 1/3, itu angka pastinya berapa? Bila ada angka yang merepresentasikan dengan tepat, namanya bukan lagi floating point, tapi integer. Menggunakan BCD juga tidak membantu, karena operasi matematika yang menghasilkan pecahan, tidak akan bisa menjadi angka pasti, kecuali dilakukan pembulatan.

    —– Start Paragraf tanggapan dari Bernaridho
    Anda kelihatannya tidak paham maksud saya. Saya fokus kepada fraksi desimal eksak yang seharusnya mudah direpresentasikan, contoh 0.1. Nilai 1/3 tidak bisa direpresentasikan dengan fraksi desimal yang eksak, itu sebabnya tidak saya singgung.
    —– Stop Paragraf tanggapan dari Bernaridho

    Compiler dalam menyatakan suatu konstanta, misal 0.1, akan menyesuaikan dengan kapasitas type data. Misalnya type single (32-bit) adalah1.5 x 10^-45 s/d 3.4 x 10^38, dengan ketepatan (precision) 8 digit di belakang koma. Adalah penyimpangan (abuse) bila type single-precision dinyatakan 9 digit, sehingga BIH menyebutkan 0.10000000149012345. Masalah konstanta ini perlu dipahami secara benar, karena bisa terjadi kesalahan pembulatan (rounding error) pada operasi berbeda type, misalnya single-precision dan double-precision.

    —– Start Paragraf tanggapan dari Bernaridho
    Saya tidak ada menyatakan single-precision = 9 bit. Anda salah baca artikel saya. Hal kedua: apakah Anda percaya bahwa 32-bit floating-point dapat representasikan 1.5^10-45 dengan eksak? Anda ingin berdebat terbuka dengan saya? Berapa taruhannya? Saya ingin bahwa yang kalah debat harus membayar uang yang cukup besar.
    —– Stop Paragraf tanggapan dari Bernaridho

    BIH juga kehilangan fokus, karena dalam suatu paragraf menyatakan single-precision adalah 32-bit, beserta contoh konstanta 0.1, tapi di paragraf lain menyatakan Intel mengimplementasikan 10-byte (80-bit), dengan konstanta yang sama. Padahal, 0.1 dalam bentuk 80-bit adalah 0.10000000000000000000 (20 digit di belakang koma, sesuai spesifikasi). Bagaimana bila dibuat 67 digit? Bisa, tapi isinya ngawur (kecuali memang tujuannya juga ngawur).

    —– Start Paragraf tanggapan dari Bernaridho
    Saya tidak mengatakan bahwa Intel implement 10-byte dengan konstanta yang sama. Anda betul-betul cuma ingin mengkritik seseorang tanpa cermat membaca tulisan orang yang ingin Anda kritik. Anda mau debat terbuka dengan taruhan, agar saya buktikan Anda yang ngawur?
    —– Stop Paragraf tanggapan dari Bernaridho

    Dulu ketika Intel membuat prosesor, misalnya 8086 (x86), tidak secara otomatis dilengkapi dengan math-coprocessor, atau 8087 (x87). Pemisahan ini berakhir saat Intel meluncurkan Pentium, yang juga berisi math-co di dalamnya. Dengan demikian, lebar data (16, 32, 64, dst) pada prosesor tidak identik dengan lebar data pada math-co. Bagi mereka yang mengerti assembly tentu paham, bahwa operand floating point disimpan di stack atau memory, bukan register. Sehingga cukup rancu, apakah bit dalam artikel adalah prosesor ataukah math-co.

    —– Start Paragraf tanggapan dari Bernaridho
    Hm, apa dasar Anda untuk klaim bahwa orang yang mengerti assembly tahu bahwa floating-point disimpan bukan di register? Siapa orangnya? Anda mau bertaruh juga agar saya buktikan bahwa di Intel floating-point disimpan di register, bukan di memory (biasa) ?
    —– Stop Paragraf tanggapan dari Bernaridho

    Sempat disinggung pula floating point untuk kalangan finansial. Dalam suatu bahasa, misalnya Delphi, disediakan suatu type khusus untuk ini, yaitu Currency. Pecahannya 4 desimal di belakang koma, tapi dijamin terbebas dari kesalahan pembulatan. Apakah di AS harus 5 desimal? Saya kurang tahu. Namun instruksi dalam type Currency ini didukung oleh perangkat keras (math-co) dan dilakukan seperti instruksi bilangan bulat. Sehingga bisa dinyatakan 0.1 = 1000, 0.01 = 100, 0.001 = 10 dan 0.0001 = 1. Berapa 0.1234? 1234.

    —– Start Paragraf tanggapan dari Bernaridho
    Bagaimana Anda buktikan klaim Delphi benar? Apakah Anda pembuat source-code compiler Delphi dan linker Delphi?
    —– Stop Paragraf tanggapan dari Bernaridho

    Lalu mengenai 1 byte = 9-bit. Saya tidak mengerti di mana lebihnya, tapi ide ini sangat aneh sekaligus terbelakang. Menurut sejarah, 9-bit byte pernah digunakan di era 1950 s/d 1960-an, misalnya UNIVAC dan IBM PDP-10. Namun sejak 1956, dengan munculnya IBM S/360, 8-bit byte menjadi standar hingga saat ini.. Lagipula 9-bit itu bukan kelipatan 2, mengapa tidak menjadi 16-bit saja ? Bila 9-bit dianggap lebih baik, 16-bit akan lebih superior.

    —– Start Paragraf tanggapan dari Bernaridho
    Kenapa harus kelipatan 2 dasarnya? Apakah yang standar pasti sudah baik?
    —– Stop Paragraf tanggapan dari Bernaridho

    Pada dasarnya apa yang ada di math-co sekarang sudah mencukupi secara umum, yaitu 80-bit floating point. Bila hal ini tidak terpenuhi, tentu ada jalan keluar, yaitu emulasi melalui perangkat lunak. Contohnya untuk bahasa Pascal, ada unit BigFloat yang mampu mengolah angka pecahan sangat besar dan representasi angka dalam bentuk string (sehingga tidak terjadi salah konversi). Kembali ke soal di atas, apakah 1/3 dapat dinyatakan secara tepat? Ternyata dengan BigFloat sekalipun, pada digit ke 67 mulai terjadi disharmoni (menjadi …3333177…). So, sekali float tidaklah bisa menjadi exact.

    —– Start Paragraf tanggapan dari Bernaridho
    Betul-betul salah pikiran Anda. Kalau tidak cukup di math-co lalu emulasi perangkat lunak? Emulasi (via) perangkat lunak dilakukan justru kalau tidak ada math-co. Kalau ada math-co untuk apa emulasi?
    —– Stop Paragraf tanggapan dari Bernaridho

    Akhirul kata, tampaknya BIH perlu banyak merujuk pada referensi yang ada, tidak sekedar membuat ide yang kontroversial. Ilmu komputer bukanlah karya sastra, perlu kajian yang mendalam dan ilmiah. Kebebasan berpendapat tentu tidak bijak bila membuat kesesatan pada pembaca. Demikian semoga bermanfaat.

    —– Start Paragraf tanggapan dari Bernaridho
    Saya pikir Andalah yang membuat ilmu komputer di benak Anda seperti sastra, bahkan sastra yang buruk. Nalar Anda tak jelas, dan sering salah. Anda pernah baca buku Stalling dan Tanenbaum yang memuat floating-point? Anda pernah baca standar IEEE 754? Justru Anda yang sesat, dan berpotensi menyesatan banyak orang dengan tanggapan ini.
    —– Stop Paragraf tanggapan dari Bernaridho

  2. —– Start Paragraf tanggapan dari Bernaridho
    Ukuran-ukuran tersebut terutama tidak tentang ukuran register, tapi terutama tentang ukuran bus data. Contoh: ukuran register floating-point di stack pada prosesor Intel tetap 80-bit. Tapi toh Intel hanya menyatakan 8-bit, 16-bit, 32-bit, dan 64-bit computing; tidak pernah 80-bit computing. Intel menyebut 8-bit … 64-bit itu terutama mengacu kepada ukuran data bus; karena ada register-register yang tidak pada ukuran-ukuran tersebut.
    —– Stop Paragraf tanggapan dari Bernaridho

    Saya menyesuaikan konteks bit di sini dengan ukuran register, karena anda banyak bicara tentang representasi pecahan desimal. Ada beragam isu mengenai lebar bit pada perangkat keras (salah satunya prosesor). Seperti data path, data bus, dan address bus. Ketiga hal itu bisa berlainan, misalnya 8 bit data path, 16 bit data bus, dan 20 bit address bus.
    Lihat: http://en.wikipedia.org/wiki/Microprocessor.

    Bila dikembalikan ke pengantar artikel, “Pada dekade 2010 kita akan terbiasa dengan perangkat keras 64-bit.” tampaknya anda merujuk pada prosesor, karena sejak tahun 1980 Intel telah mengeluarkan 8087 dengan 80-bit floating point. Lihat: http://en.wikipedia.org/wiki/Intel_8087.

    Lalu bila anda tahu bahwa FPU sejak lama sudah 80-bit, mengapa dikacaukan dengan bus data CPU? Sama saja berkata, walaupun mobil mesinnya 10, tetap saja motor kecepatannya 50 KM/jam. Tidak nyambung.

    —– Start Paragraf tanggapan dari Bernaridho
    Anda kelihatannya tidak paham maksud saya. Saya fokus kepada fraksi desimal eksak yang seharusnya mudah direpresentasikan, contoh 0.1. Nilai 1/3 tidak bisa direpresentasikan dengan fraksi desimal yang eksak, itu sebabnya tidak saya singgung.
    —– Stop Paragraf tanggapan dari Bernaridho

    Pengertian anda tentang eksak itu seperti apa? Bila konstanta 0.1 x 10 hasilnya bukan 1, silakan anda bilang tidak eksak. Tapi ini harus sesuai batasan type data tersebut, agar tidak terjadi rounding error. Kecuali anda ingin melakukan abuse.

    —– Start Paragraf tanggapan dari Bernaridho
    Saya tidak ada menyatakan single-precision = 9 bit. Anda salah baca artikel saya. Hal kedua: apakah Anda percaya bahwa 32-bit floating-point dapat representasikan 1.5^10-45 dengan eksak? Anda ingin berdebat terbuka dengan saya? Berapa taruhannya? Saya ingin bahwa yang kalah debat harus membayar uang yang cukup besar.
    —– Stop Paragraf tanggapan dari Bernaridho

    Baca dengan jelas, di atas disebut 9 digit, bukan 9 bit. Definisi 10^-45 itu dari spesifikasi bahasa, khususnya Delphi. Apakah benar seperti itu, bisa kita buktikan sama-sama, bukan dengan taruhan.

    —– Start Paragraf tanggapan dari Bernaridho
    Saya tidak mengatakan bahwa Intel implement 10-byte dengan konstanta yang sama. Anda betul-betul cuma ingin mengkritik seseorang tanpa cermat membaca tulisan orang yang ingin Anda kritik. Anda mau debat terbuka dengan taruhan, agar saya buktikan Anda yang ngawur?
    —– Stop Paragraf tanggapan dari Bernaridho

    Silakan baca kembali artikel yang anda tulis sendiri di majalah, itu jelas hitam di atas putih.

    —– Start Paragraf tanggapan dari Bernaridho
    Hm, apa dasar Anda untuk klaim bahwa orang yang mengerti assembly tahu bahwa floating-point disimpan bukan di register? Siapa orangnya? Anda mau bertaruh juga agar saya buktikan bahwa di Intel floating-point disimpan di register, bukan di memory (biasa) ?
    —– Stop Paragraf tanggapan dari Bernaridho

    Baik CPU atau FPU bisa beroperasi di register – register (atau stack istilah FPU), dan register – memory. Paragraf yang saya tulis itu mempertanyakan bit itu merujuk ke perangkat keras yang mana?

    —– Start Paragraf tanggapan dari Bernaridho
    Bagaimana Anda buktikan klaim Delphi benar? Apakah Anda pembuat source-code compiler Delphi dan linker Delphi?
    —– Stop Paragraf tanggapan dari Bernaridho

    Saya sudah coba juga di FreePascal yang open source. Tidak yakin terhadap compiler? Bisa dilihat di source. Sekarang ‘benar’ menurut anda itu seperti apa?

    —– Start Paragraf tanggapan dari Bernaridho
    Kenapa harus kelipatan 2 dasarnya? Apakah yang standar pasti sudah baik?
    —– Stop Paragraf tanggapan dari Bernaridho

    Karena komputer beroperasi pada bilangan biner, basis 2. Bila anda merombak 8 menjadi 9, bagaimana memecah 9 menjadi 2? Menggunakan satuan yang menyimpang dari basis itu bukan hal sepele.

    —– Start Paragraf tanggapan dari Bernaridho
    Betul-betul salah pikiran Anda. Kalau tidak cukup di math-co lalu emulasi perangkat lunak? Emulasi (via) perangkat lunak dilakukan justru kalau tidak ada math-co. Kalau ada math-co untuk apa emulasi?
    —– Stop Paragraf tanggapan dari Bernaridho

    Menggunakan math-co bukan keharusan, apalagi seperti anda bilang ada keterbatasan. Banyak library matematis yang dibuat menggantikan math-co, seperti saya contohkan BigFloat untuk Pascal. Yang ngawur itu mengetahui math-co tidak beres tapi masih memaksa memakai math-co.

    —– Start Paragraf tanggapan dari Bernaridho
    Saya pikir Andalah yang membuat ilmu komputer di benak Anda seperti sastra, bahkan sastra yang buruk. Nalar Anda tak jelas, dan sering salah. Anda pernah baca buku Stalling dan Tanenbaum yang memuat floating-point? Anda pernah baca standar IEEE 754? Justru Anda yang sesat, dan berpotensi menyesatan banyak orang dengan tanggapan ini.
    —– Stop Paragraf tanggapan dari Bernaridho

    Kita lihat tanggapan yang lain agar obyektif. Kesalahan bisa saja terjadi, namanya juga manusia. Yang penting mau menerima kritik dengan wajar. Ilmu komputer itu mudah dibuktikan, jadi tidak bisa dipelintir sembarangan.

  3. sufehmi said

    Kebetulan saya tidak langganan di PC-Media, dan mendapatkan edisi yang sudah lewat kadang agak sulit.

    Apakah ada scan / foto dari artikel ybs?
    Thanks.

  4. bee said

    Weleh… lama gak mampir kesini, tau2 disuguhi debat tingkat tinggi. Hmm… belum cukup informasi untuk ikutan nyebur. Gak punya majalahnya juga. Sementara otak -yg makin tua ini- udah mulai karatan. Butuh waktu untuk menggali ilmu2 yg udah rada lama ketimbun gara2 kebanyakan bermain di bhs tingkat tinggi.😀

    *nggelar tiker, pesen kopi, nyalakan rokok, nyimak diskusi para pakar*🙂

  5. Saya kutipkan bagian yang perlu mengenai floating-point yang ‘eksak’. Sumber dari PC Media 05/2009. Di tanggapan di atas BIH juga menyanggah “Saya tidak mengatakan bahwa Intel implement 10-byte dengan konstanta yang sama.” Dari sini bisa diketahui benar tidaknya sanggahan tersebut.

    —————————

    127-Bit, 256-Bit, …: Untuk Apa?

    Pada dekade 2010 kita akan terbiasa dengan perangkat keras 64-bit.
    Pada suatu saat kita akan memasuki era 128-bit, 256-bit, dan
    seterusnya. Pertanyaannya: untuk apa?

    Sampai saat ini produsen perangkat keras hanya mewujudkan
    floating-point biner pada perangkat keras. Konsekuensinya adalah bahwa
    fraksi desimal 0.1 sekalipun tidak dapat direpresentasikan dengan
    eksak. Anda hanya akan mendapati 0.100000001490 (lihat rinciannya pada
    “Know How” PC Media 05/2009 “Menguak Misteri Floating-point” (komen:
    tidak ada artikelnya)).

    Nilai ini dapat Anda peroleh dari 32-bit single-precision
    floating-point. Saya yakin, pemakaian 64-bit, 128-bit, 256-bit, bahkan
    1024-bit floating point tidak membuat representasi bilangan 0.1
    desimal lebih baik daripada nilai sebenarnya yang sudah saya
    perlihatkan. Dengan kata lain, pelebaran bus-width dan penambahan
    bit-bit untuk floating point sama sekali tidak membuat pecahan desimal
    dapat direpresentasikan dengan eksak.

    Intel implements tipe data 10-byte. Dengan 9-bit byte, kita akan
    peroleh 90-bit. Pada seri know-how tentang floating-point, nilai 0.1
    sebenarnya 0.100000001490116119382265625, tapi ditampilkan sebagai
    0.10000000149. Mengapa tidak akurat? 64-bit dan 80-bit tidak cukup.
    Aproksimasi 0.1 memerlukan perhitungan 2^-27. Dengan log2(10) =
    3.321928, perhitungan nilai desimal yang akurat untuk 2^-27 memerlukan
    90-bit data.

    —————————

  6. Kalo floating point mau bisa exact, pakai tipe string aja sekalian wakakaks. Sama seperti tipe data DECIMAL di SQL. Tapi ya itu. Apa bisa efektif dan cepat?

    Tapi ya mas Bernaridho memang very smart. Tapi smartnya scientist, bukan smartnya business people. Pasti banyak pertimbangan bisnis, ekonomis dan politik tentang bit-bit-an itu.

    Larry Page dan Sergey Brin saja menyerahkan posisi CEO ke Eric Schmidt. Artinya LP dan SB paham kalau mereka cenderung scientist. Daripada bisnis Googlenya cedera oleh idealisme seorang scientist, mending cari CEO semacam ES yang bisa mengakomodir both sides (business and idealisme).

    Remember, a good product will sell by itself, dan pemikiran yang bagus hanya akan bernilai kalau direalisasi. Kita lihat apakah pemikiran mas Bernaridho ini memiliki nilai scientific, atau cuma tren sesaat(tm).

    Gwe pikir kalau debatnya diterusin bakalan endless, karena cuma kata-kata.

  7. yohanes said

    Ada yang dilupakan dalam debat ini.

    Apa tujuan utama adanya representasi floating point? tujuan utamanya adalah dapat menampung angka dalam range yang besar, tapi dengan presisi yang rendah. Ini berbeda dengan representasi fixed point, yang eksak, tapi rangenya terbatas.

    Representasi floating point cukup baik (good enough) untuk bidang teknis, asalkan kita memahami mengenai numerical analysis (biasanya diajarkan di kuliah metode numerik). Segala macam sifat dan batasan dalam representasi floating point terdokumentasi, dan bisa diimplementasikan di hardware dengan mudah dan cepat (mengenai mudah dan cepat, think of embedded systems).

    Dalam aneka masalah sehari-hari, seperti komputasi audio dan grafik 3D, representasi floating point ini sudah sangat baik. Dalam resolusi layar terbaik saat ini, perhitungan yang meleset 0.000001 pixel tidak akan terlihat. Suatu saat nanti ketika resolusi layar semakin besar, representasi yang memakai bit yang lebih besar, akan lebih akurat untuk pixel di layar.

    Untuk masalah bisnis yang membutuhkan representasi desimal yang eksak, ada IEEE 854 (http://speleotrove.com/decimal/decarith.html). Dalam representasi IEEE 854, bilangan desimal 0.1 bisa direpresentasikan dengan tepat. Misalnya Anda adalah kontraktor untuk uni eropa, Anda harus memakai representasi ini untuk aplikasi bisnis (coba lihat: http://www.ciceuta.es/euro/doc/1/eup22en.pdf)

    Sedikit sekali komputer yang mempunyai hardware khusus untuk decimal arithmetic (contohnya IBM z900), jadi kebanyakan operasinya akan dilakukan di CPU (bukan FPU). Karena operasi dilakukan di CPU, maka dengan prosesor yang memiliki register width yang lebih besar (64, 128, 256 bit), akan membuat representasi IEEE 854 lebih eksak, dan komputasinya lebih cepat. Jadi salah kalau dikatakan bahwa jumlah bit yang lebih banyak tidak menambahkan presisi.

    Jadi masing-masing representasi ada tujuannya, ada kegunaannya, dan ada batasannya.

  8. Bernaridho said

    Mpu Gondrong ini sekedar mau cari sensasi. Anda keliru sekali

    Ini kutipan dari artikel saya yang saya kutip.

    ————————
    Nilai ini dapat Anda peroleh dari 32-bit single-precision
    floating-point. Saya yakin, pemakaian 64-bit, 128-bit, 256-bit, bahkan
    1024-bit floating point tidak membuat representasi bilangan 0.1
    desimal lebih baik daripada nilai sebenarnya yang sudah saya
    perlihatkan. Dengan kata lain, pelebaran bus-width dan penambahan
    bit-bit untuk floating point sama sekali tidak membuat pecahan desimal
    dapat direpresentasikan dengan eksak.
    ————————

    Anda katakan: “Silakan baca kembali artikel yang anda tulis sendiri di majalah, itu jelas hitam di atas putih.”

    Saya sudah kutip artikel saya yang Anda kutip. Saya tidak bicara tentang konstanta kan? Jadi, Anda ini memutarbalikkan fakta.

    Lagipula, kutipan Anda ada salahnya.

    127-Bit, 256-Bit, …: Untuk Apa?

    Yang sebenarnya

    128-Bit, 256-Bit, …: Untuk Apa?

    Kalau Anda sekedar minta buktikan sama-sama, siapa Anda sehingga merasa berhak meminta saya membuktikan ini-itu? Tenaga saya terlalu berharga untuk dispent dengan hal-hal seperti itu.

    • Lego Haryanto said

      ====
      Kalau Anda sekedar minta buktikan sama-sama, siapa Anda sehingga merasa berhak meminta saya membuktikan ini-itu? Tenaga saya terlalu berharga untuk dispent dengan hal-hal seperti itu.
      ====
      Wow! Ini kan hanya ajakan, bisa ditolak dengan lebih lembut kayanya.

      Saya rasa kalo ada keraguan dari pihak lain, bukannya memang baik untuk ditinjau kembali? Kan kalo memang ada kesalahan, bukankah lebih baik kalo ada revisi, kalo tidak, it’s okay, … saya yakin akan lebih diterima luas dan malah dapat tanggapan positif. Saya rasa untuk orang selevel penulis, saya yakin tidak perlu banyak waktu untuk prove or disprove.

      Find the truth together and make friends along the way🙂 … peace.

  9. oguds said

    Sepertinya saya mulai menemukan benang merah mengapa BIH menulis artikel tersebut. Berikut postingan saya di milis Telematika.

    ——————–

    Awalnya saya cukup heran dengan kalimat ini, “Aproksimasi 0.1
    memerlukan perhitungan 2^-27”. Darimanakah -27 itu ditemukan? Mengapa
    harus -27? Ternyata jawabannya: agar ide 9-bit byte itu diterima.
    Contoh 0.1 yg diberikan itu format single-precision, dengan fraction
    2^23. Lihat: http://en.wikipedia.org/wiki/Single_precision.

    Gawatnya, BIH memaksakan 2^23 ini hingga ke 64-bit floating point.
    Padahal, double-precision itu memiliki fraction 2^52, melebihi 2^27 yg
    dia butuhkan. Lihat: http://en.wikipedia.org/wiki/Double_precision.

    Pantas dia tidak menampilkan 0.1 dalam format double-precision, karena
    membuyarkan logika yg dia bawa. So, saya pikir bila ini penyesatan ya
    rasanya tidak berlebihan. Tapi jangan takut, beliau bukan musuh, hanya
    kawan yg patut diwaspadai.🙂

    ——————–

  10. Bernaridho said

    Kalau Anda cukup heran dengan dari mana -27 ditemukan, berarti Anda tidak cukup pakar. Anda mencari sensasi. Oh ya, Anda berlebihan mengatakan saya melakukan penyesatan. Dan dengan memutarbalikkan fakta, yang melakukan penyesatan adalah Anda.

    • Sky said

      tidak ada sanggahan atau argumentasi anda di sini, yang ada hanya ad hominem…

  11. yohanes said

    Para pembaca yang lain hendaknya menyimak juga:

    http://en.wikipedia.org/wiki/Floating_point

    untuk menilai sendiri siapa yang salah.

    Sebenarnya paragraf BIH ini sangat aneh, karena angka 27 memang tiba-tiba muncul.

    ——————————————————————
    Aproksimasi 0.1 memerlukan perhitungan 2^-27. Dengan log2(10) =
    3.321928, perhitungan nilai desimal yang akurat untuk 2^-27 memerlukan
    90-bit data.
    ——————————————————————

    Apa maksudnya aproksimasi 0.1 memerlukan 2^-27?, karena seberapapun jumlah bitnya, angka 0.1 memang tidak bisa dinyatakan secara eksak dalam representasi floating point. Ini sama tidak masuk akalnya seperti menyatakan bahwa 1/3 butuh 27 digit untuk aproksimasinya.

    Klaim angka 2^-27 tersebut sepertinya memang dipilih sembarang. Tergantung aplikasinya, Anda mungkin hanya butuh presisi beberapa digit di belakang koma misalnya untuk menghitung koordinat akhir titik di layar.

    Dalam single precision floating point, presisinya adalah 7 digit desimal, karena 2log(24) mendekati 7. Dalam representasi double presisinya adalah hampir 16 digit desimal. Jika kita memakai 80 bit (extended), presisinya 19 digit.

    Lalu diusulkan 90 bit, berapa bit yang akan diambil sebagai presisi? ini juga tidak jelas. Dalam representasi lain (16 bit half precision, 32 bit single precision, 64 bit double precision, 80 bit extended, 128 bit quadruple precision), sudah ada standar yang menyatakan berapa bit bagian fraction dan exponennya. Bahkan jika 90 bit itu hanya bagian fractionnya saja, presisinya hanya 27 digit desimal.

    Coba dijelaskan yang logis dan jelas, darimana angka 27 itu berasal? (apakah mpu gondrong kurang cermat menyalin tulisan Anda sehingga ada paragraf yang hilang?).

    Dan mungkin Anda juga perlu menjelaskan kenapa membawa2 jumlah fraction 23 bit ke double precission?

    Menambahkan jumlah bit precision akan meningkatkan akurasi bilangan floating point. Bilangan2 yang tadinya tidak bisa dinyatakan dalam jumlah bit yang lebih rendah, dapat direpresentasikan dalam jumlah bit yang lebih tinggi. Jadi salah kalo dinyatakan sama sekali tidak menambah presisi. Dan dalam kebanyakan kasus menambah bit akan membuat hasil menjadi lebih “eksak” sampai batas tertentu.

    Coba hal sederhana ini:
    Representasi 0.1 dalam 32 bit (single precision) jika dikalikan dengan bilangan 1 milyar (10 pangkat 9) akan menghasilkan 100000001.490116, tapi jika kita memakai representasi double, maka hasilnya akan benar (100000000.0). Coba saja sendiri membuat program dalam bahasa C, dengan a adalah float (dengan nilai 0.1), dan b adalah double (dengan nilai 1000000000.0), lalu coba ganti tipe a menjadi double, dan bandingkan hasilnya. Menambah jumlah bit, akan membuat perhitungan menjadi lebih eksak (sampai batas di mana kita peduli).

    Memang bilangan tertentu, tetap tidak bisa dinyatakan dalam jumlah bit/digit berapapun, tapi ini memang keterbatasan basis tertentu (sama seperti 1/3 dalam notasi desimal).

    Jadi kesimpulan secara umum adalah, tulisan BIH tidak masuk akal, dan menyesatkan.

    • Lego Haryanto said

      ===
      Coba hal sederhana ini:
      Representasi 0.1 dalam 32 bit (single precision) jika dikalikan dengan bilangan 1 milyar (10 pangkat 9) akan menghasilkan 100000001.490116, tapi jika kita memakai representasi double, maka hasilnya akan benar (100000000.0). Coba saja sendiri membuat program dalam bahasa C, dengan a adalah float (dengan nilai 0.1), dan b adalah double (dengan nilai 1000000000.0), lalu coba ganti tipe a menjadi double, dan bandingkan hasilnya. Menambah jumlah bit, akan membuat perhitungan menjadi lebih eksak (sampai batas di mana kita peduli).
      ===

      Sekedar menanggapi yang ini …

      Kalo mau berurusan dengan nilai 0.1 dalam IEEE 754 (binary floating point), ya mau pake double precision-nya IEEE 754 tetep gak bakal tepat karena ya memang ngga klop itungannya. Dengan double precision memang bisa lebih mendekati ke 0.1 karena double precision punya precision bits lebih banyak sehingga mungkin aja ada representasi yg lebih mendekati.

      Salam,
      -Lego

      • Loh kan memang kalimat pembuka saya sudah seperti ini:
        —–
        Apa maksudnya aproksimasi 0.1 memerlukan 2^-27?, karena seberapapun jumlah bitnya, angka 0.1 memang tidak bisa dinyatakan secara eksak dalam representasi floating point
        —–

        Jadi 0.1 Memang tidak bisa dengan tepat direpresentasikan. Menurut bernaridho katanya jumlah bit tidak mempengaruhi presisi, argumen saya: ya jelas berpengaruh. Dan ada batas di mana kita berhenti peduli pada presisi, misalnya ingin menghitung satuan waktu terkecil, presisinya berhenti sampai “planck time”. Lebih kecil dari itu tidak bermakna lagi.

        Kita gak bisa berharap menghitung tepung kue beberapa gram untuk dipakai memasak dengan timbangan badan, karena ppresisinya timbangan tidak cukup bermakna.

      • Supaya lebih jelas, maksud komentar saya adalah ingin menanggapi pernyataan yg ada di bagian atas ini:

        —– Start Paragraf tanggapan dari Bernaridho
        Jawaban: konteks tulisan saya adalah tentang akurasi representasi pecahan desimal. Implisit pada akhir tulisan saya memberi jawaban bahwa 128-bit, 256-bit, bahkan 512-bit tidak berguna untuk memberi pecahan desimal yang eksak. 128-bit, 256-bit dan seterusnya mungkin berguna untuk kecepatan komputasi, tapi tidak berguna untuk akurasi desimal yang eksak.
        —– Stop Paragraf tanggapan dari Bernaridho

        Katanya 256 bit tidak berguna untuk akurasi desimal yang eksak. Saya ingin menyatakan bahwa yang namanya “Eksak”, di dunia nyata ada batasannya. Dan dalam kebanyakan aplikasi dalam hidup ini, termasuk ilmu fisika yang mempelajari waktu dan benda dengan ukuran terkecil, ada batasan presisinya.

      • Lego Haryanto said

        Maaf saya salah paham mengenai tanggapan Sdr. Yohanes, saya salah menginterpretasikan bahwa pake double precision lalu jadi eksak.

        Salam,
        -Lego

    • yohanes said

      Sedikit koreksi mengenai persamaan di atas: 2log24 seharusnya log(2 pangkat 24). Sehingga untuk 90 bit presisinya 62 desimal. Sisa pernyataannya valid.

      Sebagai klarifikasi yg saya maksud menyesatkan adalah terjemahan dari “misleading”.

  12. Joshua said

    mpu, tambahan, kemarin saya baca2 spec mikroprosesor,

    benar ngga sih, klo Processor 64-bit, (FSB-nya 64), ITU BERARTI kemampuan pemetaan perintah prosessor hanya sampai 2^64 bit juga, disamping kemampuan melakukan pengalamatan memori?

    sumber referensi saya, ada di website-nya intel.

    akhirnya tahu jg blog legendanya mpu..

    • @Joshua,
      Perlu diingat bahwa angka 64-bit itu sangat besar, bahkan cakupan memory saja masih sekitar 256 TB, jauh di bawah batas 64-bit. Ketika 8087 hadir 30 tahun lalu sudah 80-bit, tapi SSE5 dan AVX (rencana Intel 2010) hanya mendukung 64-bit floating point. Jadi intinya, bit yang terlalu besar juga mubazir.

      Apakah proses 64-bit bisa memproses Integer 128-bit? Tampaknya iya. Seperti dulu prosesor 32-bit bisa memproses Integer 64-bit, lewat EDX:EAX. Jadi untuk 128-bit adalah RDX:RAX. Saya belum cek benar-benar. Tapi 128-bit Integer tampaknya sulit (belum bisa?) dideklarasikan di C. Luar biasa besarnya.

      • Lego Haryanto said

        =====
        Tapi 128-bit Integer tampaknya sulit (belum bisa?) dideklarasikan di C. Luar biasa besarnya.
        =====
        Iya, setau saya belum ada tipe data primitif untuk 128-bit,… biasanya sih pada pake 2 64-bit integers.

        Sedikit ke dunia database, kayanya sih kalo saya perhatikan, column types kayak NUMERIC/DECIMAL … perhitungan di dalemnya terbatas sampe 128 bit saja (saya cuman tebak aja sih, karena kebanyakan hanya membatasi sampe 38 decimal digit precision). Rada masuk akal sih (128 x log 2 kira-kira 38.5) … dan juga dalam 128-bit, kalo ngurusin arithmetic semacam pembagian, masih bisa pake simple bitwise arithmetics.

  13. Buat para pembaca dan komentator sekalian, saya sudah upload hasil scan majalah tersebut agar lebih jelas. Sayang sekali, pembahasan floating point di rubrik Know How menurut saya masih mengambang dan belum menyentuh hal-hal yang menjadi pertanyaan di blog ini. Selamat membaca dan dikomentari seperlunya.

    • Mpu, kayanya uploadnya masih error, gak tampil hasil scannya.

    • Mosok? Sudah ditest 2 browser baik-baik saja. Ini URL-nya: https://oguds.files.wordpress.com/2009/07/opini052009.jpg

      • Lego Haryanto said

        Thanks JPG nya, saya sudah baca, … artikel yang menarik dan teknis sih karena pembaca diajak untuk berpikir dari segi pandang low-level gini … saya asumsikan bahwa ada artikel sebelumnya yang membahas floating-point dan ada apa saja macemnya.

        Menurut saya, ada kemungkinan pembaca salah ngerti dari pengamatan sbb:

        Penulis berangkat dari paragraf ini:
        Sampai saat ini produsen perangkat keras hanya mewujudkan floating-point biner pada perangkat keras. Konsekuensinya adalah bahwa fraksi desimal 0.1 sekalipun tidak dapat dirpresentasikan dengan eksak. Anda hanya akan mendapati 0.1000000001490 (lihat referensi) …
        Dengan kata lain, pelebaran bus-width dan penambahan bit-bit untuk floating-point sama sekali tidak membuat pecahan desimal dapat direpresentasikan dengan eksak.

        Apakah ada solusinya? Ada … (dst, penulis lalu menyinggung BCD dan declet, dst).

        1. Saya yakin floating-point ya memang selamanya tidak bakal bisa merepresentasikan semua bilangan secara eksak. Kalopun kita pake floating-point basis 10, tetep aja bakalan ada bilangan yg tidak bisa direpresentasikan dengan eksak. Sebagai contoh 1/7 yang tentunya kalo dikonversi ke decimal bakalan berulang terus tanpa stop. Kita harus “dipaksa” nge-rounding dulu, barulah si komputer bisa merepresentasikan dengan eksak hasil rounding kita. Mungkin hanya urusan kecil di kata-kata, tapi pembaca bisa berpikiran bahwa ada solusi yang eksak di sini berdasarkan jawaban “Apakah ada solusinya? Ada …” di atas.

        2. Minor point yg tidak terlalu berpengaruh mungkin, penulis bilang: “Sampai saat ini produsen perangkat keras hanya mewujudkan floating-point biner pada perangkat keras.”, … tentunya ada bermacam-macam hardware support yang support floating-point biner, sbg contoh IBM floating-point yang berbasis heksadesimal, masih kepake dan lebih precise ketimbang IEEE 754, tapi tentunya range-nya jadi lebih kecil.

        BTW, udah disinggung di komentar sebelumnya, IBM udah pake hardware yang pake (decimal floating point), … DB2 9 juga udah advertise new type DECFLOAT (not sure apa sudah officially released), mestinya DECFLOAT ini bakal emulated kalo misalnya underlying hardware ngga support DPF.

      • Sorry mungkin kemarin salahnya di koneksi saya. Pagi ini saya coba dah OK.

  14. Pardede said

    Ya mau gimana lagi, wong orangnya narsis🙂

  15. mpu,aq newbie neh ada ga cara yang mudah untuk cepet mngerti bahsa2 pemograman…aq pngn jadi seorang programmer,tapi susah ngerti klo ga da yang bantu..mksih mpu

  16. aku coba belajar internet.marketing ternyata bikin muak……pas pgn mulai pelajari bahasa pmrgraman lngsung ktmu mpu2…..buos tlg support aku,harus dari mana memulai belajar,…..please,please……..thx

  17. trias said

    —– Start Paragraf tanggapan dari Bernaridho
    Kenapa harus kelipatan 2 dasarnya? Apakah yang standar pasti sudah baik?
    —– Stop Paragraf tanggapan dari Bernaridho

    om bernaridho suka guyon..😀 masak perkara dasar gitu aja ditanyakan? ckckck

    Silahkan om bernar bikin mesin yang bisa beroperasi pada basis 3, alias tegangannya nanti ada 3 range untuk menyatakan 0, 1 dan 2. Baru bisa kelipatan 3 misal 9 yaitu 3 pangkat 2, itu perkara dasar komputer om…🙂

  18. kebetulan sy melewati tlsn di PC Media tsb: Lw ada copy–annya bisa bagi dong, seperti apa sih bahasan Pa Bernaridho tsb? biasanya beliau selalu bicara konsep?

  19. Valuable info. Lucky me I discovered your site by accident, and I’m shocked why this coincidence did not took place earlier! I bookmarked it.

  20. Sijay said

    pada ngomong apa sih, ane kagak paham
    padahal ane kuliah di pemrograman juga, tapi gak dalem dalem banget kaya gini bahasannya..
    ato ini udah level dr/prof?
    ane semester 7 nih.
    rasanya NOL besar setelah baca debat ini,..
    kalo boleh tau pada ngambil jurusan apa ya?
    kan banyak tuh jurusan IT.

    email ane gan, support me😥

RSS feed for comments on this post · TrackBack URI

Tinggalkan Balasan

Isikan data di bawah atau klik salah satu ikon untuk log in:

Logo WordPress.com

You are commenting using your WordPress.com account. Logout / Ubah )

Gambar Twitter

You are commenting using your Twitter account. Logout / Ubah )

Foto Facebook

You are commenting using your Facebook account. Logout / Ubah )

Foto Google+

You are commenting using your Google+ account. Logout / Ubah )

Connecting to %s