PHP : Tipe Data – Floating Point

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.

About Reza Ervani
Adalah pendiri programming.rezaervani.com -

About Reza Ervani 381 Articles
Adalah pendiri programming.rezaervani.com -

Be the first to comment

Leave a Reply

Your email address will not be published.


*


This site uses Akismet to reduce spam. Learn how your comment data is processed.