Perbedaan Antara Terapung dan Ganda - Yang Harus Saya Gunakan? Perbedaan Antara
(Catatan: Artikel ini mengasumsikan bahwa pembaca mengetahui tentang dasar-dasar Ilmu Komputer)
Banyak programmer pemula / siswa yang terdaftar di Ilmu Komputer menanyakan pertanyaan yang sering diajukan yang relevan dengan bidang tertentu dalam Ilmu Komputer yang mereka pelajari. Kebanyakan program pemula dimulai dengan topik sistem bilangan yang digunakan di komputer modern, termasuk biner , desimal , oktal dan heksadesimal < sistem Ini adalah format nomor komputer yang merupakan representasi internal nilai numerik di komputer (atau kalkulator dan jenis komputer digital lainnya). Nilai-nilai ini disimpan sebagai "pengelompokan bit".
Seperti yang kita ketahui komputer mewakili data dalam kumpulan digit biner (yaitu, dalam kombinasi1s dan 0s , seperti, 1111 mewakili 15 dalam sistem desimal), masuk akal untuk mengajarkan tentang format angka yang berbeda yang digunakan untuk mewakili rentang nilai dinamis, karena mereka menyusun blok dasar perhitungan / pemrosesan bilangan dalam segala jenis operasi. Begitu sistem bilangan didefinisikan di kelas (seringkali kurang), siswa tergoda untuk beralih ke format angka yang berbeda dalam tipe yang sama (i. E., floating-point arithmetic ) yang memiliki tingkat presisi dan jumlah tertentu. Dengan demikian, mereka terpaksa belajar nuansa antara tipe tertentu. Dua tipe data yang paling sering digunakan adalah Float dan Double , dan sementara itu mereka menargetkan kebutuhan yang sama (yaitu, floating-point arithmetic ), cukup banyak beberapa perbedaan dalam representasi internal dan efek keseluruhan pada perhitungan dalam program. Sangat disayangkan bahwa banyak programmer melewatkan nuansa antara tipe data Flat and Double, dan akhirnya menyalahgunakannya di tempat yang seharusnya tidak mereka gunakan di tempat pertama. Pada akhirnya mengakibatkan salah perhitungan di bagian lain program.
Float vs Double … Apa masalahnya?
Float and 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 , dan lain-lain, bukan bilangan bulat (yaitu 2 , 5 , 15 , dll.), Sehingga memerlukan pertimbangan pecahan dalam biner Sebagai angka desimal resultan (i. E., 20, 123 , 16 23 , dll.) tidak dapat dengan mudah diwakili dengan format biner normal (i. e., Integer). Perbedaan utama antara Float dan Double adalah data floating point pertama (32-bit), sedangkan yang terakhir adalah tipe data floating point presisi ganda (64-bit). Double disebut "double" karena pada dasarnya merupakan versi presisi ganda Float. Jika Anda menghitung jumlah yang besar (pikirkan ribuan angka 0 di nomor itu), maka ketidakakuratannya akan lebih kecil di Double dan Anda tidak akan kehilangan banyak ketepatan.
#include
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;
untuk (int i = 0; i <738; ++ i)
num4 + = num3;
printf ("% 15g n", num4);
getchar ();
}
Ini akan mencetak yang berikut ini:
9. 000031
8. 99999999999983
Di sini, Anda dapat melihat bahwa sedikit perbedaan dalam presisi Float and Double memberikan jawaban yang berbeda sama sekali, meskipun Double tampaknya lebih akurat daripada Float.
#include
#include
int main () {
float num1 = sqrt (2382719676512365 1230112312312312);
double num2 = sqrt (2382719676512365 1230112312312312);
printf ("% f n", num1);
printf ("% f n", num2);
getchar ();
}
Ini menghasilkan output sebagai berikut:
48813108. 000000
48813109. 678778
Di sini, Anda dapat melihat bahwa jawaban di Double memiliki ketepatan yang lebih baik.
Semua dalam semua, lebih baik menggunakan Double untuk floating point aritmatika, karena beberapa fungsi matematika standar di C beroperasi pada komputer Double dan modern sangat cepat dan efisien untuk perhitungan floating-point Double. Hal ini menyebabkan mengurangi kebutuhan untuk menggunakan Float, kecuali jika Anda perlu mengoperasikan banyak bilangan floating-point (pikirkan array besar dengan ribuan angka 0) atau Anda beroperasi pada sistem yang tidak mendukung double- presisi floating point, seperti banyak GPU, perangkat bertenaga rendah dan platform tertentu (ARM Cortex-M2, Cortex-M4, dll.) tidak mendukung Double, maka Anda harus menggunakan Float. Selain itu, satu hal yang perlu diingat adalah GPU / CPU tertentu bekerja lebih baik / efisien dalam pemrosesan Float, seperti dalam perhitungan vektor / matriks, jadi Anda mungkin perlu melihat spesifikasi / dokumentasi spesifikasi perangkat keras untuk menentukan yang mana yang sebaiknya Anda gunakan. untuk mesin tertentu
jarang ada alasan untuk menggunakan Float, bukan Double dalam kode yang menargetkan komputer modern. Ketepatan ekstra dalam Double mengurangi, tapi tidak menghilangkan, kemungkinan pembulatan kesalahan atau ketidaktepatan lainnya yang dapat menyebabkan masalah pada bagian lain program. Banyak fungsi matematika atau operator mengubah dan mengembalikan Double, jadi Anda tidak perlu membuang nomornya kembali ke Float, karena itu mungkin akan kehilangan presisi.Untuk analisis terperinci tentang aritmatika floating point, saya sangat menyarankan Anda untuk membaca artikel mengagumkan ini (// 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 dengan presisi tunggal lebih cepat daripada presisi ganda.
- Aplikasi Anda memanfaatkan aritmatika floating-point dengan berat, seperti ribuan nomor dengan ribuan angka 0.
- Anda melakukan pengoptimalan tingkat rendah. Misalnya, Anda menggunakan instruksi CPU khusus (mis., SSE, SSE2, AVX, dll.) Yang beroperasi pada beberapa nomor / array / vektor dalam satu waktu.