Perbandingan Nilai Float Bahasa C Terhadap Nilai Lainnya
// 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");
}
// 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;
}
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.
// 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");
}
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).
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
}
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
}
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
}
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
}
- 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.
Kesimpulan
- Karakter Aritmatika Bahasa C dan Fungsinya
- Tipe Data Konversi Bahasa C dan Fungsinya
- Kelas Penyimpanan Bahasa C dan Fungsinya
- Variabel Static Bahasa C dan Fungsinya
- Nilai Default Variabel Static Bahasa C dan Fungsinya
- Volatile Bahasa C dan Fungsinya
- Membuat Nilai Variabel Tidak Berubah pada Bahasa C Menggunakan Konstanta Qualifier
5 komentar untuk "Perbandingan Nilai Float Bahasa C Terhadap Nilai Lainnya"
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 -
Apakah ada cara untuk bisa membandingkan dunia nilai float yang sifatnya dapat setara atau senilai?
BalasHapusJawabannya 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.
HapusLakukan konversi tipe data float ke tipe data lain yang hasil representasinya tidak perlu melakukan pembulatan nilai seperti tipe data integer.
HapusUntuk 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.
HapusBisa, 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