Perbedaan antara float dan double - mana yang harus saya gunakan?

Perbedaan antara float dan double - mana yang harus saya gunakan?

(Catatan: Artikel ini mengasumsikan bahwa pembaca tahu tentang dasar -dasar ilmu komputer)

Banyak pemrogram / 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 hexadecimal sistem. Ini adalah format nomor komputer yang merupakan representasi internal dari 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 set digit biner (i.e., dalam kombinasi 1s Dan 0s, seperti, 1111 mewakili 15 Dalam sistem desimal), masuk akal untuk mengajarkan tentang berbagai format angka yang digunakan untuk mewakili kisaran nilai dinamis, karena mereka membentuk blok dasar dari pemrosesan perhitungan/angka dalam segala jenis operasi apa pun. Setelah sistem angka didefinisikan di kelas (seringkali buruk), siswa tergoda untuk pindah ke format angka yang berbeda dalam jenis yang sama (i.e., Aritmatika titik mengambang) yang memiliki presisi dan rentang angka tertentu. Dengan demikian, mereka dipaksa untuk mempelajari nuansa antara jenis tertentu. Dua tipe data yang paling umum digunakan adalah Mengambang Dan Dobel, Dan sementara mereka menargetkan kebutuhan yang sama (saya.e., Aritmatika titik mengambang), ada beberapa perbedaan dalam representasi internal mereka dan efek keseluruhan pada perhitungan dalam program. Sangat disayangkan bahwa banyak programmer melewatkan nuansa antara tipe data datar dan ganda, dan akhirnya menyalahgunakannya di tempat -tempat di mana mereka tidak boleh digunakan di tempat pertama. Pada akhirnya mengakibatkan kesalahan perhitungan di bagian lain dari program ini.

Dalam artikel ini, saya akan memberi tahu Anda perbedaan antara mengapung dan dua kali lipat dengan contoh kode dalam bahasa pemrograman C. Ayo Memulai!

Float vs double… apa masalahnya?

Float dan Double adalah representasi data yang digunakan untuk operasi aritmatika titik mengambang, pikirkan angka desimal yang Anda hitung di kelas matematika, seperti, 20.123, 16.23, 10.2, dll., mereka bukan bilangan bulat (i.e., 2, 5, 15, dll.), dengan demikian mereka membutuhkan pertimbangan pecahan dalam biner. Sebagai bilangan desimal yang dihasilkan (i.e., 20.123, 16.23, dll.) tidak dapat dengan mudah diwakili dengan format biner normal (i.e., Bilangan bulat). Perbedaan utama antara float dan double adalah bahwa yang pertama adalah data titik mengambang presisi tunggal (32-bit), sedangkan yang terakhir adalah tipe data floating point presisi ganda (64-bit). Double disebut "ganda" karena pada dasarnya ini adalah versi presisi ganda dari float. Jika Anda menghitung jumlah yang sangat besar (pikirkan ribuan 0 dalam jumlahnya), maka ketidakakuratan akan lebih kecil di ganda dan Anda tidak akan kehilangan banyak presisi.

Lebih baik menjelaskan menggunakan contoh kode. Berikut ini adalah operasi di float dan ganda 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);

num3 ganda = 1.0 /82;

num4 ganda = 0;

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

num4 += num3;

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

getchar ();

Itu mencetak yang berikut:

9.000031

8.9999999999983

Di sini, Anda dapat melihat bahwa sedikit perbedaan dalam ketepatan float dan double memberikan jawaban yang berbeda sama sekali, meskipun ganda tampaknya lebih akurat daripada float.

Berikut ini adalah contoh fungsi sqrt () dalam C:

#termasuk

#termasuk

int main ()

float num1 = sqrt (2382719676512365.1230112312312312);

ganda num2 = sqrt (2382719676512365.1230112312312312);

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

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

getchar ();

Ini memberikan output berikut:

48813108.000000

48813109.678778

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

Secara keseluruhan, lebih baik menggunakan ganda untuk aritmatika titik mengambang, karena beberapa fungsi matematika standar dalam C beroperasi pada komputer ganda dan modern sangat cepat dan efisien untuk perhitungan titik mengambang ganda. Ini mengarah pada pengurangan kebutuhan untuk menggunakan float, kecuali jika Anda perlu beroperasi pada banyak bilangan titik mengambang (pikirkan array besar dengan ribuan 0 dalam angka) atau Anda beroperasi pada sistem yang tidak mendukung ganda- Titik mengambang presisi, sebanyak GPU, perangkat bertenaga rendah dan platform tertentu (ARM Cortex-M2, Cortex-M4, dll.) Jangan 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 dalam manual / dokumentasi spesifikasi perangkat keras untuk lebih memutuskan mana yang harus Anda gunakan untuk mesin tertentu.

Jarang ada alasan untuk menggunakan float, bukan ganda dalam kode yang menargetkan komputer modern. Presisi ekstra dalam pengurangan ganda, tetapi tidak menghilangkan, kemungkinan pembulatan kesalahan atau ketidaktepatan lain yang dapat menyebabkan masalah di bagian lain dari program ini. Banyak fungsi matematika atau operator mengonversi dan mengembalikan ganda, jadi Anda tidak perlu memberikan angka kembali ke float, karena itu mungkin kehilangan presisi. Untuk analisis terperinci tentang aritmatika titik mengambang, saya sangat menyarankan Anda untuk membaca artikel yang luar biasa ini (http: // docs.peramal.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 dari presisi ganda.
  • Aplikasi Anda memanfaatkan aritmatika titik mengambang, seperti ribuan angka dengan ribuan 0.
  • Anda melakukan optimalisasi tingkat rendah. Misalnya, Anda menggunakan instruksi CPU khusus (i.e., SSE, SSE2, AVX, dll.) yang beroperasi pada beberapa angka / array / vektor sekaligus.

Kesimpulan

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