Artikel Terbaru

4 Tahap Menciptakan Elemen Menggunakan Method createElement() DOM

Pada dokumen html, method document.createElement() adalah method yang digunakan untuk menciptakan elemen html. Elemen ini ditentukan menggunakan elementName yang diciptakan sebelumnya, atau dari elemen html yang tidak diketahui, yang diciptakan jika elementName tidak ditentukan atau tidak dikenali.

Perbandingan Nilai Float Terhadap Nilai Lain pada Bahasa C

Pada artikel ini dijelaskan bagaimana perbandingan hasil antara nilai float terhadap nilai lain pada bahasa C. Untuk memahami lebih lanjut, maka perkirakan hasil keluaran dari program C berikut ini:

// perbandingan nilai float 

// terhadap nilai lain pada

// bahasa C

#include<stdio.h>

 

int main()

{

float x = 0.1;

if (x == 0.1)

printf("IF");

else if (x == 0.1f)

printf("ELSE IF");

else

printf("ELSE");

}


Output dari program sebelumnya adalah "ELSE IF" yang berarti ekspresinya "x == 0.1" dengan nilai return adalah false dan ekspresi "x==0.1f" dengan nilai return adalah true.

Perhatikan program berikut untuk memahami alasan dibalik output program sebelumnya.

// perbandingan nilai float

// terhadap nilai lain pada

// bahasa C

#include<stdio.h>

 

int main()

{

float x = 0.1;

printf("%d %d %d", sizeof(x), sizeof(0.1), sizeof(0.1f));

return 0;

}


Output dari program adalah "4 8 4" dari hasil kompilator C, yang pada dasarnya mencetak ukuran dari floatdouble, dan float.

Nilai-nilai yang digunakan dalam ekspresi dianggap sebagai double (format float presisi double) kecuali 'f' ditentukan dibagian akhir. Jadi, ungkapan "X == 0,1" memiliki makna rangkap dua, pada sisi kanan dan float pada sisi kiri yang disimpan dalam format titik presisi float tunggal. Dalam kondisi ini, float akan dipromosikan menjadi tipe double. Format presisi double memiliki lebih banyak nilai bit daripada format presisi tunggal.

Biner dengan nilai 0,110 dapat dinyatakan dengan (0,000110011001100110...) 2 yang akan naik hingga tak terbatas. Hal ini dikarenakan ketepatan float kurang dari dua kali lipat maka setelah titik tertentu (23 pada float dan 52 pada double) maka hasilnya akan terpotong. Karenaya setelah promosi float menjadi double (pada saat perbandingan) kompilator akan mengisi bit yang tersisa dengan nol. Karenanya didapatkan hasil yang berbeda dimana persamaan desimal keduanya akan berbeda. Misalnya,

Pada float
=> (0.1)10 = (0.00011001100110011001100)2
In double after promotion of float ...(1)
=> (0.1)10 = (0.00011001100110011001100000000000000000...)2
                                      ^ padding zeroes here
Pada double tanpa promotion ... (2)
=> (0.1)10 = (0.0001100110011001100110011001100110011001100110011001)2

Dapat dilihat hasil dari perbedaan persamaannya.
Karenanya, pernyataan 'if' tidak akan pernah bisa dieksekusi.

Catatan: promosi float ke double hanya akan menyebabkan ketidakcocokkan ketika nilai (seperti 0.1) menggunakan bit yang lebih presisi dari presisi tunggal. Contoh, program if pada bahasa c berikut ini:

// perbandingan nilai float

// terhadap nilai lain pada

// bahasa C

#include<stdio.h>

 

int main()

{

float x = 0.5;

if (x == 0.5)

printf("IF");

else if (x == 0.5f)

printf("ELSE IF");

else

printf("ELSE");

}

Output:
IF

Di sini biner setara dengan 0,510 adalah (0,100000...) 2 (tidak ada presisi yang hilang pada tipe float dan double). Oleh karena itu jika kompilator memuat angka nol tambahan pada saat promosi maka akan didapatkan hasil yang sama dalam desimal setara dari sisi kiri dan kanan dibandingkan (x == 0,5).

Komentar

  1. Apakah ada cara untuk bisa membandingkan dunia nilai float yang sifatnya dapat setara atau senilai?

    BalasHapus
    Balasan
    1. Jawabannya adalah tidak bisa, karena cara menampilkan nilai float yang sifatnya relatif atau nilai yang direpresentasikan sifatnya dibulatkan, maka tidak bisa dilakukan perbandingan nilai float yang bersifat dasar atau aritmatik.

      Hapus
    2. Lakukan konversi tipe data float ke tipe data lain yang hasil representasinya tidak perlu melakukan pembulatan nilai seperti tipe data integer.

      Hapus
    3. Untuk dapat melakukan perbandingan nilai float atau bilangan berkoma, maka hal yang perlu dipertimbangkan untuk jadi dasar perbandingan nilai adalah ketepatannya dalam melakukan perbandingan. Contoh, jika dua buah angka nilainya adalah 3,1428 dan 3,1415, maka kedua nilai tersehing adalah bernilai sama pada presisi 0,01 namun akan menjadi tidak presisi jika ambang batas presisinya ditingkatkan lagi seperti 0,0001, maka kedua nilai tersebut tidak akan bernilai sama.

      Hapus
    4. Bisa, tapi untuk melakukan berbandingan dua nilai float tersebut pembuatan programnya agak sulit karena harus memerhatikan nilai presisi dari kedua data float yang akan dibandingkan. Tidak hanya itu, jika kedua nilai float tersebut tiba-tiba mengalami pembulatan nilai, maka hal tersebut juga akan berpengaruh pada hasil perbandingan dari kedua nilai tersebut.

      Hapus

Posting Komentar

Respon komentar 7 x 24 jam, mohon bersabar jika komentar tidak langsung dipublikasi atau mendapatkan balasan secara langsung. :D

Catatan: setiap iklan yang ditayangkan pada blog ini bersumber dari google adsense. Dengan jenis iklan yang dipilih adalah, sebagai berikut.

POIN 1, Iklan yang ditampilkan hanya boleh berbahasa indonesia atau berbahasa inggris. Tidak menerima jenis iklan dalam bahasa yang lain selain yang telah disebutkan karena blog ini dibuat untuk para pengunjung dari negara atau orang yang berbahasa Indonesia.

POIN 2, Setiap gambar yang ditampilkan pada iklan sifatnya tidak mengganggu para pengunjung yang melihat blog, atau tidak boleh menampilkan gambar yang bersifat menjijikkan atau merangsang rasa mual.

POIN 3, Jenis iklan yang dipasang bukan merupakan iklan spam, atau berisi dan mengarahkan pengunjung ke alamat yang berbahaya atau bersifat penipuan.

POIN 4, Segala bentuk iklan tunduk dan patuh pada ketentuan dari pihak Adsense google dan pemilik blog.

POIN 5, Segala jenis iklan yang tidak bertentangan dengan poin 1-4 yang dijelaskan sebelumnya, maka iklan tersebut dapat ditampilkan pada blog.

POIN 6, Jika ada pihak ketika yang ingin memasang iklan pada blog ini secara langsung, maka dapat menghubungi pemilik blog melalui kontak 0882 3218 8316.



~ Ikatlah Ilmu dengan Memostingkannya ~

Hot Artikel

Enkapsulasi pada Java

Perbedaan stdio.h dan stdlib.h pada Bahasa C

3 Jenis Utama Looping pada Java

Perbedaan Antara int main() dan int main(void) pada Bahasa C

Penjelasan Singkat tentang Konsep Asosiasi, Komposisi, dan Agregasi pada Java