Seringkali dalam pengalaman pemrograman saya, saya perlu membuat keputusan apakah saya harus menggunakan float atau double untuk bilangan real saya. Terkadang saya mencoba float, terkadang saya double, tapi sebenarnya ini terasa lebih subyektif. Jika saya akan dihadapkan untuk membela keputusan saya, saya mungkin tidak akan memberikan alasan yang masuk akal.
Kapan Anda menggunakan float dan kapan Anda menggunakan double? Apakah Anda selalu menggunakan ganda, hanya ketika kendala memori hadir Anda pergi untuk float? Atau Anda selalu menggunakan float kecuali persyaratan presisi mengharuskan Anda menggunakan double? Apakah ada beberapa perbedaan substansial mengenai kompleksitas komputasi dari aritema dasar antara float dan double? Apa pro dan kontra menggunakan float atau double? Dan apakah Anda bahkan menggunakan double panjang?
sumber
Jawaban:
Pilihan default untuk tipe floating-point seharusnya
double
. Ini juga merupakan jenis yang Anda dapatkan dengan literal titik mengambang tanpa akhiran atau fungsi standar (dalam C) yang beroperasi pada angka titik mengambang (misexp
.sin
, Dll.).float
seharusnya hanya digunakan jika Anda perlu beroperasi pada banyak angka floating-point (pikirkan dalam urutan ribuan atau lebih) dan analisis algoritme telah menunjukkan bahwa rentang dan akurasi yang berkurang tidak menimbulkan masalah.long double
dapat digunakan jika Anda membutuhkan jangkauan atau keakuratan lebih daridouble
, dan jika ia menyediakan ini pada platform target Anda.Singkatnya,
float
danlong double
harus disediakan untuk digunakan oleh spesialis, dengandouble
untuk penggunaan "setiap hari".sumber
float
(dan kadang-kadang setengah presisi) karena mata manusia, layar, atau sistem warna tidak memiliki banyak bit presisi. . Saran ini berlaku untuk mengatakan OpenGL dll. Saran tambahan ini tidak berlaku untuk gambar medis, yang memiliki persyaratan presisi yang lebih ketat.Jarang ada alasan untuk menggunakan float alih-alih menggandakan kode yang menargetkan komputer modern. Ketepatan ekstra mengurangi (tetapi tidak menghilangkan) kemungkinan kesalahan pembulatan atau masalah lainnya yang menyebabkan ketidaktepatan.
Alasan utama yang bisa saya pikirkan untuk menggunakan float adalah:
Jadi, pada dasarnya, gandakan adalah cara untuk pergi kecuali Anda memiliki keterbatasan perangkat keras atau kecuali analisis telah menunjukkan bahwa menyimpan angka presisi ganda berkontribusi signifikan terhadap penggunaan memori.
sumber
Gunakan
double
untuk semua perhitungan Anda dan variabel temp. Gunakanfloat
saat Anda perlu mempertahankan array angka -float[]
(jika presisi memadai), dan Anda berurusan dengan lebih dari puluhan ribufloat
angka.Banyak / sebagian besar fungsi matematika atau operator mengonversi / mengembalikan
double
, dan Anda tidak ingin mengembalikan angka kefloat
untuk langkah perantara apa pun.Misalnya. Jika Anda memiliki input 100.000 angka dari file atau streaming dan perlu mengurutkannya, masukkan angka dalam a
float[]
.sumber
Beberapa platform (ARM Cortex-M2, Cortex-M4 dll) tidak mendukung dobel (Ini selalu dapat diperiksa di manual referensi untuk prosesor Anda. Jika tidak ada peringatan kompilasi atau kesalahan, itu tidak berarti bahwa kode optimal. ganda dapat ditiru.). Itu sebabnya Anda mungkin harus tetap menggunakan int atau mengapung .
Jika bukan itu masalahnya, saya akan menggunakan ganda .
Anda dapat memeriksa artikel terkenal oleh D. Goldberg ("Apa Yang Harus Diketahui Setiap Ilmuwan Komputer Tentang Aritmatika Titik Apung"). Anda harus berpikir dua kali sebelum menggunakan aritmatika floating-point. Ada kemungkinan besar mereka tidak diperlukan sama sekali dalam situasi khusus Anda.
http://perso.ens-lyon.fr/jean-michel.muller/goldberg.pdf
sumber
Untuk masalah dunia nyata, ambang batas pengambilan sampel data Anda penting saat menjawab pertanyaan ini. Demikian pula, lantai kebisingan juga penting. Jika salah satu terlampaui oleh pemilihan tipe data Anda, tidak akan ada manfaat dari meningkatnya presisi.
Kebanyakan sampler dunia nyata terbatas pada 24 bit DAC s. Menyarankan bahwa 32 bit presisi pada perhitungan dunia nyata harus memadai di mana signifikansinya adalah 24 bit presisi.
Presisi ganda datang dengan biaya 2x memori. Oleh karena itu membatasi penggunaan doubles over float dapat secara drastis memotong jejak memori / bandwidth dari aplikasi yang sedang berjalan.
sumber
Pilihan variabel apa yang digunakan antara float dan double tergantung pada keakuratan data yang diperlukan. Jika suatu jawaban diperlukan untuk memiliki perbedaan yang dapat diabaikan dari jawaban yang sebenarnya, jumlah tempat desimal yang diperlukan akan banyak sehingga akan menentukan bahwa dua kali lipat akan digunakan. Float akan memotong beberapa bagian tempat desimal sehingga mengurangi akurasi.
sumber
Biasanya, saya menggunakan
float
tipe ketika saya tidak membutuhkan banyak ketepatan - misalnya, untuk uang - yang salah, tetapi apa yang saya lakukan salah lakukan.Di sisi lain, saya gunakan
double
ketika saya membutuhkan lebih banyak ketepatan, misalnya untuk algoritma matematika yang kompleks.Standar C99 mengatakan ini:
Saya tidak pernah benar-benar menggunakan
long double
, tetapi saya tidak menggunakan C / C ++ begitu banyak. Biasanya saya menggunakan bahasa yang diketik secara dinamis seperti Python, di mana Anda tidak perlu peduli dengan jenisnya.Untuk informasi lebih lanjut tentang Double vs Float , lihat pertanyaan ini di SO .
sumber
Decimal
adalah tipe floating point dan biasanya merupakan pilihan yang baik untuk perhitungan uang.