Floating Point
4.3 Floating Point
Type floating point dapat digunakan untuk merepresentasikan bilangan pecahan misalnya 1.5 dan -0.001. Terdapat dua type yang bisa kita pilih yaitu float dan double. Jika terdapat literal angka yang mengandung bilangan fraksional maka type literal tersebut secara default adalah double.
Type Jarak (positif dan negatif) Bit / Byte yang Digunakan
float -45
1.5 * 10 38 sampai 3.4 * 10 32 bit / 4 byte
double -324
5 * 10 308 sampai 1.7 * 10 64 bit / 8 byte
Batas terkecil di tabel tersebut maksudnya adalah fraksional terkecil yang bisa direpresentasikan. Tentu saja 0 juga bisa direpresentasikan oleh floating point. Selain menuliskan literal floating point dalam bentuk biasanya, kita juga bisa menuliskannya dengan format mantisa + exponen. Untuk format tersebut karakter e atau
E digunakan. Contohnya 1.01e2 sama dengan 1.01 * 10 2 atau 101, dan 5e1 sama dengan
5 * 10 1 atau 50. Tidak boleh ada pemisah antara mantisa, e, dan eksponennya. Hal-hal yang telah kita bahas sebelumnya di bab ini yang berhubungan dengan inte
berlaku juga untuk floating point. Mari kita pakai floating point dalam program berikut:
[program lengkap] / / Program 4.5 - Penggunaan float ing point [program lengkap] / / Program 4.5 - Penggunaan float ing point
class Float ingPoint {
st at ic v oid Main( ) {
double pan j an g = 100. 4; double leb ar = 32. 3 ; double anak = 5; Console. Wr it eLine( “ Luas t anah: ” ) ; Console. Wr it eLine( panj ang * lebar ) ; Console. Wr it eLine( “ Luas t anah unt uk t iap anak : ” ) ; Console. Wr it eLine( panj ang * lebar / anak ) ;
} } [/program lengkap]
Outputnya adalah sebagai berikut:
[console] Luas t anah: 3242.92 Luas t anah unt uk t iap anak : 648.584 [/console]
Ada beberapa hal baru yang bisa kita ketahui. Pertama, jika kedua operand dari operator binary adalah floating point, maka hasilnya juga adalah floating point. Kedua,
Method WriteLine() dapat menerima floating point sebagai argumentnya (begitu juga dengan method Write()).
4.4 decimal
Type floating point memiliki beberapa kelemahan dalam ketepatannya yang berhubungan dengan cara kerja internalnya. Kadang-kadang kesalahan dapat terjadi, contohnya ada di program berikut:
[program lengkap] / / Program 4.6 - Mem per agak an k elem ahan float ing point
using Syst em ;
class Kelem ahanFloat ing {
st at ic v oid Main( ) {
Console. Wr it eLine( 1. 1 - 1. 09) ; / / sehar usny a 0. 01 Console. Wr it eLine( 2. 1 - 2. 09) ; / / sehar usny a 0. 01
Console. Wr it eLine( 1. 1 + 0. 1) ; / / sehar usny a 1. 2 Console. Wr it eLine( 1. 1 + 0. 00000000000000001) ; / / sehar usny a 1 . 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1
} } [/program lengkap]
Hasilnya tidak seperti yang kita harapkan, perhatikan baris ke 2 dan 4:
[console] 0.01
0. 0100000000000002 1.2 1.1 [/console]
Kesalahan-kesalahan tersebut mungkin begitu kecil dan biasanya dapat ditoleransi, namun bagaimana kalau program yang kita buat berhubungan dengan perhitungan uang? Tentunya kesalahan sekecil apapun tidak dapat diterima.
Disitulah type decimal berperan. Type ini besarnya 128 bit atau 16 byte, dan dapat
merepresentasikan positif/negatif 1 * 10 28 sampai 7.9 * 10 . Jaraknya jauh lebih kecil dari float dan double, namun tidak akan ada pembulatan dan kesalahan-kesalahan
perhitungan lain yang ada di type floating point. Untuk menulis literal yang typenya decimal, kita harus membubuhi m atau M di belakang angkanya. Program 4.6 akan kita
tulis ulang menggunakan decimal:
[program lengkap] / / Pr ogr am 4.7 - Menggunak an decim al
using Syst em ;
class Menggunak anDecim al {
st at ic v oid Main( ) {
Console. Wr it eLine( 1. 1m - 1 . 0 9 m ) ; / / sehar usny a 0 . 0 1 Console. Wr it eLine( 2. 1m - 2 . 0 9 m ) ; / / sehar usny a 0 . 0 1
Console. Wr it eLine( 1. 1m + 0. 1m ) ; / / sehar usny a 1. 2 Console. Wr it eLine( 1. 1m + 0. 00000000000000001m ) ; / / sehar usny a 1 . 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1
} } [/program lengkap]
Hasilnya sempurna:
[console] 0.01 0.01
1.2 1.10000000000000001 [/console]
[latihan mini] • Sebutkan 2 type floating point yang ada di C#!
• Sebutkan keunggulan dan kelemahan type decimal dibandingkan dengan float atau double!
• float dan double. • Type decimal memiliki ketepatan yang sangat tinggi dan tidak akan ada pembulatan dalam operasi
yang melibatkan type decimal. Di lain pihak type decimal membutuhkan 128 bit, jangkauannya lebih rendah, dan operasi yang melibatkan type decimal membutuhkan waktu yang lebih lama.
[/latihan mini]
4.5 char
char digunakan untuk merepresentasikan 1 karakter. C# tidak menggunakan standar ASCII tetapi menggunakan Unicode. Unicode besarnya 16 bit dan mendefinisikan semua karakter yang ada di berbagai bahasa manusia beserta macam- macam simbol. Untuk menulis literal karakter, kita harus mengurung karakternya dengan ‘ dan ‘. Lihat contoh berikut:
[program lengkap] / / Program 4.8 - Kar ak t er
using Syst em ;
class Kar ak t er {
st at ic v oid Main( ) {
char h = ‘h’; char a = ‘a’; char l = ‘l’; char o = ‘o’; Console. Wr it e( h) ; Console. Wr it e( a) ; Console. Wr it e( l) ; Console. Wr it e( o) ; Console. Wr it eLine( ‘! ’) ;
} } [/program lengkap]
Ini outputnya:
[console] [console]
Baris baru (new line), huruf- huruf arab, dan banyak karakter lain secara umum cukup sulit untuk ditulis secara normal. Untuk menyelesaikan masalah tersebut kita bisa
menggunakan escape seque nce heksadesimal atau escape sequence unicode. Cara menggunakan escape sequence heksadesimal adalah menuliskan \x diikuti kode Unicodenya dalam heksadesimal. Contohnya karakter a memiliki kode Unicode 97 atau 0x61. Ini berarti kita bisa menulis ‘\x61’ sebagai alternatif dari ‘a’.
Escape sequence Unicode dimulai dengan \u atau \U dan ditulis menggunakan salah satu format berikut:
[format] \u[angka][angka][angka][angka] \U[angka][angka][angka][angka] \u[angka][angka][angka][angka][angka][angka][angka][angka] \U[angka][angka][angka][angka][angka][angka][angka][angka] [/format]
Contohnya adalah ‘\u0061’ yang sama artinya dengan ‘\x61’ dan ‘a’. Escape sequence Unicode dapat digunakan untuk menuliskan identifier, sedangkan
escape sequence heksadesimal tidak. Mekanisme “keyword sebagai identifier” juga dapat dilaksanakan dengan menggunakan escape sequence Unicode, seperti dalam kutipan berikut:
[kutipan program] cl ass cl\ u0061ss / / cl\ u0061ss sam a ar t iny a dengan dengan @class [/kutipan program]
[catatan] Yang dimaksud angka dalam format penulisan escape sequence Unicode (dan heksadesimal) juga mencakup abjad a-f dan A-F. [/catatan]
Beberapa karakter malah memiliki escape sequence spesial, seperti ditunjukkan dalam tabel berikut:
Escape Sequence
Kode Unicode
Arti
\a
0x7 atau 7
Alert (membunyikan suara)
\b
0x8 atau 8
Backspace
\f
0xc atau 12
Form Feed
\n
0xa atau 10
New line (baris baru)
\r
0xd atau 13
Kembali ke awal baris
\t
0x9 atau 9
Tabulasi horizontal
\v
0xb atau 11
Tabulasi vertikal
0x0 atau 0
Null
0x27 atau 39
Tanda kutip
0x22 atau 34
Tanda kutip ganda
0x5c atau 92
Backslash (garis miring kiri)
Penggunaannya ada di program berikut:
[program lengkap] / / Program 4.9 - Escape sequ en ce
using Syst em ;
class EscapeSequ en ce {
st at ic v oid Main( ) {
char t andaPet ik = ‘\ ”’; char t andaKut ip = ‘\ ’’; char bar isBar u = ’\ n’; Console. Wr it e( t andaPet ik ) ; Console. Wr it e( “ halo. . . . . . . ” ) ; Console. Wr it e( t andaPet ik ) ; Console. Wr it e( bar isBar u) ; Console. Wr it e( t andaKut ip) ; Console. Wr it e( “ halo. . . . . . . ” ) ; Console. Wr it e( t andaKut ip) ;
} } [/program lengkap]
Outputnya adalah sebagai berikut:
[console] " halo. . . . . . . " 'halo. . . . . . . ' [/console]
Daftar karakter-karakter Unicode beserta kodenya ada di [[x]].