Perbedaan Antara Float dan Double - Yang Mana Yang Harus Saya Gunakan?

(Catatan: Artikel ini mengasumsikan bahwa pembaca tahu tentang dasar-dasar Ilmu Komputer)

Banyak programmer / siswa pemula yang terdaftar dalam Ilmu Komputer mengajukan pertanyaan yang sering diajukan yang relevan dengan bidang tertentu dalam Ilmu Komputer yang mereka pelajari. Sebagian besar kursus pemula dimulai dengan topik sistem angka yang digunakan di komputer modern, termasuk biner, desimal, oktal dan heksadesimal sistem. Ini adalah format angka komputer yang merupakan representasi internal dari nilai numerik di komputer (atau kalkulator dan komputer digital jenis apa pun lainnya). Nilai-nilai ini disimpan sebagai "pengelompokan bit".

Seperti yang kita ketahui komputer mewakili data dalam set digit biner (mis., Dalam kombinasi dari 1s dan 0s, seperti, 1111 mewakili 15 dalam sistem desimal), masuk akal untuk mengajarkan tentang berbagai format angka yang digunakan untuk mewakili rentang nilai yang dinamis, karena mereka membentuk blok dasar dari perhitungan / pemrosesan angka dalam segala jenis operasi. Setelah sistem bilangan didefinisikan di dalam kelas (seringkali buruk), siswa tergoda untuk pindah ke format angka yang berbeda dalam jenis yang sama (yaitu., aritmatika floating-point) yang memiliki ketelitian dan kisaran angka tertentu. Dengan demikian, mereka terpaksa mempelajari nuansa antara tipe-tipe tertentu. Dua tipe data yang paling umum digunakan adalah Mengapung dan Dua kali lipat, dan sementara mereka menargetkan kebutuhan yang sama (mis., aritmatika floating-point), ada beberapa perbedaan dalam representasi internal mereka dan efek keseluruhan pada perhitungan dalam program. Sangat disayangkan bahwa banyak programmer kehilangan nuansa antara tipe data Flat dan Double, dan akhirnya menyalahgunakan mereka di tempat-tempat di mana mereka tidak boleh digunakan di tempat pertama. Pada akhirnya menghasilkan kesalahan perhitungan di bagian lain dari program.

Pada artikel ini, saya akan memberi tahu Anda perbedaan antara float dan double dengan contoh kode dalam bahasa pemrograman C. Mari kita mulai!

Float vs Double ... Apa masalahnya?

Float dan Double adalah representasi data yang digunakan untuk operasi aritmatika floating-point, pikirkan angka desimal yang Anda hitung di kelas matematika, seperti, 20.123, 16.23, 10.2, dll. mereka bukan bilangan bulat (mis. e., 2, 5, 15, dll), sehingga mereka memerlukan pertimbangan fraksi dalam biner. Sebagai angka desimal yang dihasilkan (mis., 20.123, 16.23, dll. tidak dapat dengan mudah direpresentasikan dengan format biner normal (mis., Integer). Perbedaan utama antara Float dan Double adalah bahwa yang pertama adalah data floating point presisi tunggal (32-bit), sedangkan yang kedua adalah tipe data floating point presisi ganda (64-bit). Ganda disebut "ganda" karena pada dasarnya ini adalah versi presisi ganda Float. Jika Anda menghitung jumlah yang sangat besar (pikirkan ribuan angka 0 di angka), maka ketidakakuratan akan lebih kecil di dalam Double dan Anda tidak akan kehilangan banyak ketepatan..

Lebih baik menguraikan menggunakan contoh kode. Berikut ini adalah operasi pada Float dan Double melalui fungsi matematika yang disediakan dalam bahasa C:

#termasuk

int main ()

float num1 = 1.f / 82;

float num2 = 0;

untuk (int i = 0; i < 738; ++i)

num2 + = num1;

printf ("%. 7g \ n", num2);

double num3 = 1.0 / 82;

double num4 = 0;

untuk (int i = 0; i < 738; ++i)

num4 + = num3;

printf ("%. 15g \ n", num4);

getchar ();

Mencetak berikut ini:

9.000031

8.99999999999983

Di sini, Anda dapat melihat bahwa sedikit perbedaan dalam ketepatan Float dan Double memberikan jawaban yang sama sekali berbeda, walaupun Double tampaknya lebih akurat daripada Float..

Berikut ini adalah contoh fungsi sqrt () di C:

#termasuk

#termasuk

int main ()

float num1 = sqrt (2382719676512365.1230112312312312);

double num2 = sqrt (2382719676512365.1230112312312312);

printf ("% f \ n", num1);

printf (ā€œ% f \ nā€, num2);

getchar ();

Ini memberikan output sebagai berikut:

48813108.000000

48813109.678778

Di sini, Anda dapat melihat bahwa jawaban dalam Double memiliki ketepatan yang lebih baik.

Secara keseluruhan, lebih baik menggunakan Double untuk aritmatika floating-point, karena beberapa fungsi matematika standar di C beroperasi pada komputer Double dan modern sangat cepat dan efisien untuk perhitungan Double floating-point. Hal ini menyebabkan berkurangnya kebutuhan untuk menggunakan Float, kecuali jika Anda perlu beroperasi pada banyak angka floating-point (pikirkan array besar dengan ribuan 0 dalam angka) atau Anda beroperasi pada sistem yang tidak mendukung double- floating point presisi, karena banyak GPU, perangkat berdaya rendah dan platform tertentu (ARM Cortex-M2, Cortex-M4, dll.) belum mendukung Double, maka Anda harus menggunakan Float. Selain itu, satu hal yang perlu diingat adalah bahwa GPU / CPU tertentu bekerja lebih baik / efisien dalam pemrosesan Float, seperti dalam perhitungan vektor / matriks, jadi Anda mungkin perlu melihat manual spesifikasi / dokumentasi perangkat keras untuk lebih baik memutuskan mana yang harus Anda gunakan untuk mesin tertentu.

Jarang ada alasan untuk menggunakan Float daripada Double dalam kode yang menargetkan komputer modern. Ketepatan ekstra dalam Double mengurangi, tetapi tidak menghilangkan, kemungkinan kesalahan pembulatan atau ketidaktepatan lain yang dapat menyebabkan masalah di bagian lain dari program. Banyak fungsi atau operator matematika mengkonversi dan mengembalikan Dobel, jadi Anda tidak perlu mengembalikan angka ke Float, karena itu mungkin kehilangan presisi. Untuk analisis terperinci tentang aritmatika titik-mengambang, saya sangat menyarankan Anda untuk membaca artikel yang mengagumkan ini (http://docs.oracle.com/cd/E19957-01/806-3568/ncg_goldberg.html).

Ringkasan

Jadi ... singkatnya:

Tempat di mana Anda harus menggunakan Float:

  • Jika Anda menargetkan perangkat keras di mana presisi tunggal lebih cepat daripada presisi ganda.
  • Aplikasi Anda banyak menggunakan aritmatika floating-point, seperti ribuan angka dengan ribuan 0.
  • Anda melakukan optimasi tingkat sangat rendah. Misalnya, Anda menggunakan instruksi CPU khusus (mis., SSE, SSE2, AVX, dll.) Yang beroperasi pada banyak angka / array / vektor pada satu waktu.

Kesimpulan

Dalam artikel ini saya telah menyoroti perbedaan antara Float dan Double, dan mana yang harus digunakan di tempat-tempat tertentu. Dapat diperdebatkan, lebih baik menggunakan Double di sebagian besar tempat secara membabi buta, terutama jika Anda menargetkan komputer modern, karena kemungkinan efisiensi rendah karena penggunaan aritmatika floating-point ganda sangat tidak mungkin. Jika Anda memiliki pertanyaan, maka Anda dapat bertanya di bagian komentar di bawah ini!