Apa f
yang ditunjukkan setelah angka? Apakah ini dari C atau Objective-C? Apakah ada perbedaan dalam tidak menambahkan ini ke bilangan konstan?
CGRect frame = CGRectMake(0.0f, 0.0f, 320.0f, 50.0f);
Bisakah Anda menjelaskan mengapa saya tidak menulis:
CGRect frame = CGRectMake(0, 0, 320, 50);
objective-c
c
floating-point
typeoneerror
sumber
sumber
Jika ragu, periksa keluaran assembler. Misalnya tulis potongan kecil, minimal seperti ini
Kemudian kompilasi ke assembler dengan
-S
opsi.Simpan keluaran assembler dalam
test.s
file dan hapus.0f
dari konstanta dan ulangi perintah kompilasi. Kemudian lakukandiff
yang barutest.s
dan yang sebelumnya. Pikirkan itu harus menunjukkan jika ada perbedaan nyata. Saya pikir terlalu banyak yang memiliki visi tentang apa yang menurut mereka dilakukan oleh kompilator, tetapi pada akhirnya orang harus tahu cara memverifikasi teori apa pun.sumber
-O
. Saya menggunakan i686-apple-darwin10-gcc-4.2.1 (GCC)Terkadang ada perbedaan.
sumber
Ini memberi tahu komputer bahwa ini adalah bilangan floating point (saya asumsikan Anda berbicara tentang c / c ++ di sini). Jika tidak ada f setelah bilangan, itu dianggap ganda atau bilangan bulat (tergantung apakah ada desimal atau tidak).
sumber
Literal floating point dalam kode sumber Anda diuraikan sebagai ganda. Menetapkannya ke variabel berjenis float akan kehilangan presisi. Sangat presisi, Anda membuang 7 digit signifikan. Postfix "f" memberi tahu compiler: "Saya tahu apa yang saya lakukan, ini disengaja. Jangan mengganggu saya".
Kemungkinan menghasilkan bug tidaklah kecil. Banyak program telah jatuh ke atas pada perbandingan floating point yang salah dipahami atau mengasumsikan bahwa 0,1 benar-benar dapat direpresentasikan.
sumber
Yang
f
Anda bicarakan mungkin dimaksudkan untuk memberi tahu kompiler bahwa ia bekerja dengan float. Saat Anda menghilangkanf
, biasanya diterjemahkan menjadi ganda.Keduanya adalah bilangan floating point, tetapi
float
menggunakan lebih sedikit bit (sehingga lebih kecil dan kurang tepat) daripada adouble
.sumber
Ini adalah hal C - literal floating point presisi ganda (ganda) secara default. Menambahkan sufiks f membuatnya menjadi presisi tunggal (mengambang).
Anda dapat menggunakan int untuk menentukan nilai di sini dan dalam hal ini tidak akan ada bedanya, tetapi menggunakan jenis yang benar adalah kebiasaan yang baik untuk diterapkan - konsistensi adalah hal yang baik secara umum, dan jika Anda perlu mengubah nilai ini nanti Anda Sekilas akan tahu apa tipe mereka.
sumber
Dari C. Ini berarti konstanta literal float. Anda dapat menghilangkan "f" dan ".0" dan menggunakan int dalam contoh Anda karena konversi implisit dari int menjadi float.
sumber
Ini hampir pasti dari C dan mencerminkan keinginan untuk menggunakan tipe 'float' daripada 'double'. Ini mirip dengan sufiks seperti L pada angka untuk menunjukkan bahwa mereka adalah bilangan bulat panjang. Anda bisa menggunakan integer dan kompilator akan otomatis mengkonversi sesuai (untuk skenario khusus ini).
sumber
Ini biasanya memberitahu compiler bahwa nilainya adalah a
float
, yaitu integer floating point. Ini berarti dapat menyimpan bilangan bulat, nilai desimal dan eksponensial, misalnya1
,0.4
atau1.2e+22
.sumber