Lompat ke konten Lompat ke sidebar Lompat ke footer

Perbandingan Nilai Float Bahasa C Terhadap Nilai Lainnya

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.


Sebelum mempelajari materi tentang Perbandingan Nilai Float Bahasa C Terhadap Nilai Lainnya, terlebih dahulu pelajari materi tentang: Tipe Data Umum Bahasa C yang Biasa Digunakan, Variabel Dua Pilihan pada Bahasa C Menggunakan Bool, dan Integer Promotion Bahasa C dan Fungsinya.

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.

Dalam pemrograman, seringkali diperlukan perbandingan antara nilai float dengan nilai lainnya, seperti integer atau double. Bahasa C menyediakan aturan tertentu untuk perbandingan nilai float, dan pemahaman yang baik terhadap hal ini sangat penting untuk menghindari kesalahan yang mungkin terjadi. Artikel ini akan membahas cara perbandingan nilai float dalam Bahasa C terhadap nilai lainnya, termasuk aturan perbandingannya.

Contoh:

// 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.

Contoh:

// 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.

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.

Baca Juga:

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:

Contoh:

// 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).

Perbandingan Nilai Float dengan Integer: Dalam Bahasa C, nilai float dapat dibandingkan dengan nilai integer tanpa masalah besar. Saat pengembang membandingkan float dengan integer, nilai integer akan diubah secara otomatis menjadi float sebelum dilakukan perbandingan.

Contoh: 

float nilaiFloat = 10.5;

int nilaiInt = 10;


if (nilaiFloat > nilaiInt) {

// Eksekusi jika nilaiFloat

// lebih besar dari nilaiInt

else {

// Eksekusi jika nilaiFloat

// tidak lebih besar dari

// nilaiInt

}


Perbandingan Nilai Float dengan Double: Perbandingan nilai float dengan double juga mungkin, namun, dalam hal ini, float akan diubah secara otomatis menjadi double sebelum dilakukan perbandingan.

Contoh:

float nilaiFloat = 10.5;

double nilaiDouble = 20.75;


if (nilaiFloat < nilaiDouble) {

// Eksekusi jika nilaiFloat

// lebih kecil dari

// nilaiDouble

else {

// Eksekusi jika nilaiFloat

// tidak lebih kecil dari

// nilaiDouble

}


Perbandingan Kesetaraan Nilai Float: Ketika pengembang ingin memeriksa kesetaraan dua nilai float, sebaiknya hindari perbandingan langsung menggunakan operator == karena floating-point arithmetic bisa memunculkan kesalahan kecil.

Contoh:

float nilaiFloat1 = 0.1 + 0.2;

float nilaiFloat2 = 0.3;


float epsilon = 0.0001;  

// Nilai toleransi kecil


if (fabs(nilaiFloat1 - nilaiFloat2) < epsilon){

// Eksekusi jika nilaiFloat1

// dan nilaiFloat2 hampir sama

else {

// Eksekusi jika nilaiFloat1

// dan nilaiFloat2 tidak sama

}


Pentingnya Toleransi pada Perbandingan Nilai Float: Dalam perbandingan nilai float, penggunaan toleransi atau epsilon sangat penting untuk mengatasi ketidakpastian dalam perhitungan floating-point. Kesalahan kecil dalam perhitungan bisa menyebabkan perbedaan yang signifikan.

Perbandingan dengan Operator Logika: Pengembang juga dapat menggunakan operator logika (&&, ||) untuk membuat perbandingan kompleks yang melibatkan nilai float dan nilai lainnya.

Contoh:

float nilaiFloat = 10.5;

int nilaiInt = 10;


if (nilaiFloat > 0.0 

&& nilaiInt == 10) {

// Eksekusi jika nilaiFloat

// lebih besar dari 0.0 dan

// nilaiInt sama dengan 10

}


Menghindari Perbandingan Langsung: Umumnya, disarankan untuk menghindari perbandingan langsung antara dua nilai float karena ketidakpastian dalam representasi floating-point. Lebih baik menggunakan toleransi atau membandingkan selisihnya dengan nilai yang sangat kecil.

Kelebihan perbandingan nilai float dalam Bahasa C terhadap nilai lainnya melibatkan fleksibilitas dan kemampuan untuk menangani tipe data yang berbeda. Berikut adalah beberapa kelebihan:
  • Fleksibilitas Tipe Data: Bahasa C memungkinkan perbandingan nilai float dengan berbagai tipe data, termasuk integer dan double. Ini memberikan fleksibilitas dalam menangani berbagai jenis data numerik.
  • Konversi Otomatis: Saat melakukan perbandingan antara float dan tipe data lain, konversi otomatis dilakukan sesuai dengan aturan Bahasa C. Ini memungkinkan programmer untuk melakukan perbandingan tanpa perlu melakukan konversi ekspisit.
  • Penanganan Kalkulasi Pecahan: Dengan kemampuan untuk membandingkan nilai float dengan integer atau double, Bahasa C memungkinkan penanganan kalkulasi pecahan dengan mudah, membantu dalam penulisan kode yang lebih ekspresif.
  • Operator Logika untuk Kondisi Kombinasi: Programmer dapat menggunakan operator logika (&&, ||) untuk membuat kondisi perbandingan kompleks yang melibatkan nilai float dan tipe data lainnya. Ini memberikan kemampuan untuk membuat logika perbandingan yang lebih canggih.
  • Kemudahan dalam Memeriksa Kesetaraan: Dengan menggunakan toleransi atau epsilon, perbandingan kesetaraan nilai float dapat dilakukan dengan baik, mengatasi masalah ketidakpastian dalam perhitungan floating-point.
  • Penggunaan dalam Konteks Kalkulasi Ilmiah: Dalam konteks kalkulasi ilmiah atau teknik, di mana seringkali digunakan nilai floating-point, kemampuan untuk membandingkan nilai float dengan tipe data lainnya sangat penting. Bahasa C menyediakan fitur ini secara baik.
  • Kemampuan Menangani Hasil Operasi Floating-Point: Perbandingan nilai float memungkinkan programmer untuk dengan mudah menangani hasil operasi floating-point, seperti hasil dari perhitungan pecahan atau operasi matematika kompleks.
  • Praktik Terbaik untuk Menangani Pecahan: Dengan memahami dan mengikuti praktik terbaik, seperti penggunaan toleransi, programmer dapat membuat perbandingan nilai float yang aman dan dapat diandalkan.

Pemahaman yang baik tentang aturan perbandingan nilai float dalam Bahasa C memungkinkan programmer untuk menggunakan fitur ini secara efektif dan membuat kode yang lebih bersih dan andal dalam menangani berbagai jenis data numerik.

Kesimpulan

Perbandingan nilai float dalam Bahasa C terhadap nilai lainnya memerlukan pemahaman yang hati-hati terkait aturan konversi dan toleransi untuk meminimalkan risiko kesalahan numerik. Dengan mengikuti praktik terbaik ini, programmer dapat membuat perbandingan yang akurat dan dapat diandalkan antara nilai float dan nilai lainnya dalam lingkungan pemrograman Bahasa C.

Referensi Tambahan:

Artikel ini didedikasikan kepada: Farikhah Ismawati, Hardiansyah Rochani, Indarisha Nurfaizah, Latiful Umam, dan Lindha Ambar Cahyaningrum.

5 komentar untuk "Perbandingan Nilai Float Bahasa C Terhadap Nilai Lainnya"

  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

Hubungi admin melalui Wa : +62-896-2414-6106

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

Bantu admin meningkatkan kualitas blog dengan melaporkan berbagai permasalahan seperti typo, link bermasalah, dan lain sebagainya melalui kolom komentar.

- Ikatlah Ilmu dengan Memostingkannya -
- Big things start from small things -