Oleh : Abah Razi
بسم الله الرحمن الرحيم
Angka floating point (juga dikenal sebagai “float”, “double” atau “bilangan real”) dapat dispesifikasikan menggunakan beberapa sintak berikut :
<!--?php $a = 1.234; $b = 1.2e3; $c = 7E-10; ?-->
Secara formal :
LNUM [0-9]+ DNUM ([0-9]*[\.]{LNUM}) | ({LNUM}[\.][0-9]*) EXPONENT_DNUM [+-]?(({LNUM} | {DNUM}) [eE][+-]? {LNUM})
Ukuran dari suatu float bergantung pada platform yang digunakan, biasana nilai maksimum adalah ~1.8e308 dengan presisi hingga 14 digit desimal (format IEEE 64 bit)
Warning
Floating point precision
Angka floating point memiliki presisi terbatas. Meskipun hal itu bergantung pada sistem, PHP umumnya menggunakan format presisi IEEE 754, yang akan memberikan suatu error maksimum relatif karena dibulatkan dalam order 1.11e-16.
Operasi aritmatika non elementary mungkin dapat memberikan error yang lebih besar, dan, tentu saja, propagasi error mestilah dipertimbangkan saat beberapa operasi digabungkan.
Sebagai tambahan, angka-angka rasional yang secara tepat dapat diwakili sebagai angka floating point dalam basis 10, seperti 0.1 atau 0.7 tidak memiliki representasi yang tepat sebagai angka floating point di basis 2, yang digunakan secara internal, tidak peduli berapapun ukuran mantissa-nya. Karena itu, mereka tidak dapat dikonversi ke dalam nilai biner internal tanpa kehilangan presisi dalam jumlah kecil. Hal ini dapat membawa kepada hasil yang membingungkan :
Sebagai contoh floor((0.1+0.7)*10)
akan biasanya menghasilkan nilai 7 bukan nilai 8 seperti yang diinginkan., dikarenakan representasi internal akan tampak seperti : 7.9999999999999991118….
Jadi jangan pernah percaya hasil floating number hingga digit terakhir, dan jangan membandingkan nilai floating point langsung untuk persamaan. Jika presisi yang tinggi dibutuhkan, fungsi matematika preisis yang tepat dan fungsi gmp sudah tersedia.
Leave a Reply