Tipe data float adalah floating point IEEE 754 32-bit presisi tunggal dan tipe data ganda adalah floating point IEEE 754 64-bit presisi ganda.
Apa artinya? Dan kapan saya harus menggunakan float bukan double atau sebaliknya?
Tipe data float adalah floating point IEEE 754 32-bit presisi tunggal dan tipe data ganda adalah floating point IEEE 754 64-bit presisi ganda.
Apa artinya? Dan kapan saya harus menggunakan float bukan double atau sebaliknya?
double
daripadafloat
menyelamatkan Anda dari bug terkait presisi, sia-sia .Jawaban:
The Wikipedia halaman pada itu adalah tempat yang baik untuk memulai.
Untuk menyimpulkan:
float
diwakili dalam 32 bit, dengan 1 bit tanda, 8 bit eksponen, dan 23 bit signifikan (atau yang mengikuti dari angka notasi ilmiah: 2.33728 * 10 12 ; 33728 adalah signifikan).double
direpresentasikan dalam 64 bit, dengan 1 bit tanda, 11 bit eksponen, dan 52 bit signifikan.Secara default, Java menggunakan
double
untuk mewakili angka floating-point (jadi literal3.14
diketikdouble
). Ini juga tipe data yang akan memberi Anda rentang angka yang jauh lebih besar, jadi saya akan sangat menyarankan penggunaannya berakhirfloat
.Mungkin ada perpustakaan tertentu yang benar-benar memaksa penggunaan Anda
float
, tetapi secara umum - kecuali jika Anda dapat menjamin bahwa hasil Anda akan cukup kecil untuk muat difloat
's kisaran yang ditentukan , maka yang terbaik untuk opt dengandouble
.Jika Anda membutuhkan akurasi - misalnya, Anda tidak dapat memiliki nilai desimal yang tidak akurat (seperti
1/10 + 2/10
), atau Anda melakukan apa pun dengan mata uang (misalnya, mewakili $ 10,33 dalam sistem), kemudian gunakan aBigDecimal
, yang dapat mendukung jumlah presisi yang sewenang-wenang dan menangani situasi seperti itu dengan elegan.sumber
*100
. Tolong, Anda ada benarnya di sini, tetapi bisakah Anda lebih tepat :)Float memberi Anda kira-kira. 6-7 presisi angka desimal sementara ganda memberi Anda kira-kira. 15-16. Juga kisaran angka lebih besar untuk ganda.
Double membutuhkan ruang penyimpanan 8 byte sementara float hanya membutuhkan 4 byte.
sumber
Bilangan floating-point, juga dikenal sebagai bilangan real, digunakan ketika mengevaluasi ekspresi yang membutuhkan ketelitian fraksional. Misalnya, perhitungan seperti akar kuadrat, atau transendental seperti sinus dan kosinus, menghasilkan nilai yang ketelitiannya membutuhkan tipe titik-mengambang. Java mengimplementasikan set tipe dan operator floatingpoint (IEEE – 754) standar. Ada dua jenis tipe floating-point, float dan double, yang masing-masing mewakili angka presisi tunggal dan ganda. Lebar dan rentangnya ditampilkan di sini:
mengapung
Tipe float menentukan nilai presisi tunggal yang menggunakan 32 bit penyimpanan. Presisi tunggal lebih cepat pada beberapa prosesor dan membutuhkan ruang setengah dari presisi ganda, tetapi akan menjadi tidak tepat ketika nilainya sangat besar atau sangat kecil. Variabel tipe float berguna ketika Anda membutuhkan komponen fraksional, tetapi tidak memerlukan tingkat presisi yang besar.
Berikut adalah beberapa contoh deklarasi variabel float:
mengapung hightemp, lowtemp;
dua kali lipat
Presisi ganda, sebagaimana dilambangkan dengan kata kunci ganda, menggunakan 64 bit untuk menyimpan nilai. Presisi ganda sebenarnya lebih cepat daripada presisi tunggal pada beberapa prosesor modern yang telah dioptimalkan untuk perhitungan matematika berkecepatan tinggi. Semua fungsi matematika transendental, seperti sin (), cos (), dan sqrt (), mengembalikan nilai ganda. Ketika Anda perlu menjaga akurasi dari banyak perhitungan berulang, atau memanipulasi angka bernilai besar, double adalah pilihan terbaik.
sumber
float
maupundouble
yang terbaik digunakan untuk mata uang di Jawa, karena mereka membuka peluang untuk kesalahan pembulatan. Artikel ini membahas lebih detail: javapractices.com/topic/TopicAction.do?Id=13Meskipun demikian, Java tampaknya memiliki bias terhadap penggunaan ganda untuk perhitungan:
Contohnya program yang saya tulis sebelumnya hari ini, metode tidak bekerja ketika saya menggunakan float, tapi sekarang berfungsi dengan baik ketika saya mengganti float dengan double (dalam NetBeans IDE):
sumber
Ini akan memberikan kesalahan:
/MyClass.java:3: error: tipe yang tidak kompatibel: kemungkinan konversi lossy dari float ganda menjadi float a = 0,5;
Ini akan bekerja dengan baik
Ini juga akan berfungsi dengan baik
Alasan : Java secara default menyimpan bilangan real sebagai ganda untuk memastikan presisi yang lebih tinggi.
Double membutuhkan lebih banyak ruang tetapi lebih presisi selama komputasi dan float membutuhkan lebih sedikit ruang tetapi kurang tepat.
sumber
Menurut standar IEEE, float adalah representasi 32 bit dari bilangan real sedangkan ganda adalah representasi 64 bit.
Dalam program Java biasanya kita sebagian besar melihat penggunaan tipe data ganda. Hanya untuk menghindari luapan karena rentang angka yang dapat ditampung menggunakan tipe data ganda lebih banyak daripada rentang ketika float digunakan.
Juga ketika presisi tinggi diperlukan, penggunaan ganda dianjurkan. Beberapa metode perpustakaan yang diimplementasikan sejak lama masih membutuhkan penggunaan tipe data float sebagai suatu keharusan (itu hanya karena diimplementasikan menggunakan float, tidak ada yang lain!).
Tetapi jika Anda yakin bahwa program Anda membutuhkan jumlah kecil dan meluap tidak akan terjadi dengan penggunaan float Anda, maka penggunaan float sebagian besar akan meningkatkan kompleksitas ruang Anda karena float membutuhkan setengah memori seperti yang diperlukan oleh ganda.
sumber
Contoh ini menggambarkan cara mengekstrak tanda (bit paling kiri), eksponen (8 bit berikut) dan mantissa (23 bit paling kanan) dari float di Jawa.
Pendekatan yang sama dapat digunakan untuk mantissa ganda (eksponen 11 bit dan 52 bit).
Kredit: http://sj.github.io/java-float/
sumber
Anda harus menggunakan double bukannya float untuk perhitungan yang tepat, dan float bukannya double ketika menggunakan perhitungan yang kurang akurat. Float hanya berisi angka desimal, tetapi ganda mengandung nomor floating point presisi IEEE754, membuatnya lebih mudah untuk memuat dan menghitung angka lebih akurat. Semoga ini membantu.
sumber
Dalam perhitungan pemrograman reguler, kami tidak menggunakan float. Jika kami memastikan bahwa kisaran hasil berada dalam kisaran tipe data float, maka kami dapat memilih tipe data float untuk menghemat memori. Secara umum, kami menggunakan ganda karena dua alasan: -
Tipe float dan double data dirancang khusus untuk perhitungan ilmiah, di mana kesalahan aproksimasi dapat diterima. Jika keakuratan menjadi perhatian utama, maka disarankan untuk menggunakan kelas BigDecimal daripada tipe data float atau double. Sumber: - Mengambang dan menggandakan tipe data di Jawa
sumber