TENTANG AKURASI
Topik-topik yang akan dipaparkan dalam Bab ini: akurasi yang diperlukan untuk masalah tertentu, akurasi yang dihasilkan bahasa pemrograman, dan juga akurasi dalam mempublikasikan hasil.
Akurasi yang diperlukan untuk masalah tertentu
Keakuratan yang dibutuhkan dalam perhitungan tergantung pada tujuannya. Misalnya, apabila seseorang ingin menghitung posisi planet dengan tujuan memperoleh waktu terbit dan terbenamnya, maka akurasi 0.01 derajat sudah memadai. Alasannya jelas: gerakan harian tampak dari bola langit bersesuaian dengan rotasi lebih dari satu derajat selama interval waktu empat menit, dan sebagainya, yang mana kesalahan 0.01 derajat pada posisi obyek akan mengakibatkan kesalahan (kurang-lebih) hanya 0.04 menit dalam perhitungan waktu terbit dan terbenamnya. Untuk masalah ini, perhitungan dengan menyertakan ratusan komponen periodik untuk mendapatkan posisi planet dengan akurasi 0".01 hanya akan membuang-buang tenaga dan waktu pemrosesan komputer saja.
Tetapi jika posisi planet yang dibutuhkan untuk menghitung okultasi bintang oleh planet itu, maka diperlukan akurasi yang lebih baik dari 1" karena ukuran kecil dari piringan planet tersebut.
Sebuah program yang ditulis untuk satu tujuan mungkin tidak cocok untuk tujuan yang lainnya. Misalkan, untuk perhitungan posisi bintang, program menggunakan metode akurasi rendah untuk perhitungan presesi (lihat Bab 20). Sedangkan hasilnya sudah cukup baik untuk pengamat yang ingin mencari benda-benda langit dengan teleskop yang dipasang secara paralaktik (mengukur vertikal ke arah zenit), program tersebut menjadi sangat tidak layak jika tidak memenuhi keakuratan yang diinginkan, misalnya dalam perhitungan okultasi, atau untuk perhitungan konjungsi.
Jika diperlukan akurasi tertentu, kita harus menggunakan algoritma yang benar-benar memberikan akurasi ini. John Mosley [1] menyebutkan sebuah program komersial yang tersedia di pasar dapat menghitung posisi planet, tetapi karena koreksi berbagai gangguan tidak diterapkan, misalnya posisi Saturnus, Uranus dan Neptunus bisa salah sampai 1 derajat, meskipun hasilnya ditampilkan sampai ke detik busur terdekat!
Untuk mendapatkan akurasi yang lebih baik, seringkali perlu untuk menggunakan metode lain dalam perhitungan, bukan hanya untuk mempertahankan angka-angka desimal dalam hasil perkiraan perhitungan. Sebagai contoh, jika seseorang harus mengetahui posisi Mars dengan akurasi 0.1 derajat, cukup dengan menggunakan orbit elips tanpa gangguan (gerak Keplerian). Namun, jika ingin mengetahui posisi Mars presisi 10" atau lebih baik, maka gangguan yang disebabkan planet lain harus dihitung dan Program tersebut akan menjadi lebih lama.
Programmer, yang mengetahui rumus-rumus dan akurasi yang diinginkan dalam masalah yang dimaksudkan di sini, harus mempertimbangkan komponen-komponen yang diperlukan, jika dimungkinkan, dia harus menghindari yang tidak perlu untuk menjaga program sebaik dan seefisien mungkin. Misalnya, bujur geometrik rata-rata Matahari, mengacu pada ekuinoks rata-rata tanggal tertentu, dirumuskan sebagai berikut:
L = 280°27'59".244 + 129 602 771".380 T + 1".0915 T2
dimana T adalah waktu dalam abad Julian 36525 hari ephemeris dari epoch 1.5 TD Januari 2000. Dalam rumus ini, komponen terakhir (Percepatan sekuler Matahari) lebih kecil dari 1" jika < 0.95, yaitu, antara tahun 1905 dan 2095. Jika akurasi 1" dianggap memadai, maka komponen T2 dapat diabaikan untuk setiap waktu dalam periode tersebut. Tetapi untuk tahun 100 kita memiliki T = -19, sehingga komponen terakhir menjadi 394", yang lebih besar dari 0.1 derajat.
Akurasi komputer
Akurasi komputer merupakan masalah yang jauh lebih kompleks. Bahasa pemrograman harus bekerja dengan jumlah angka signifikan yang cukup. (Catatan bahwa jumlah angka signifikan ini tidak sama dengan jumlah desimal! Misalnya, bilangan 0.0000183 memiliki tujuh desimal, tetapi hanya tiga angka yang signifikan. Angka signifikan dari sebuah bilangan adalah angka yang tersisa ketika angka nol sebelum dan sesudahnya disisihkan).
Pada operasi pembulatan oleh mesin komputer untuk 6 angka signifikan, maka pemrosesan 1 000 000 + 2 akan menghasilkan 1 000 000.
Bisa menjadi hal berbahaya, misalnya ketika perbedaan diperoleh dari dua angka yang hampir-sama. Misalkan dilakukan operasi pengurangan bilangan berikut:
6.92736 - 6.92735 = 0.00001.
Setiap bilangan ditulis dengan enam angka, tetapi menghilangkan angka nolnya memberikan hasil hanya ada satu angka signifikan! Selain itu, dua angka yang diberikan telah dibulatkan. Jika demikian halnya, maka bahkan situasinya bisa lebih buruk. Misalkan bahwa dua bilangan yang sebenarnya 6.927 3649 dan 6.927 3451. Sedangkan hasil yang benar adalah 0.000 0198, yang hampir dua kali hasil sebelumnya!
Enam atau delapan angka signifikan, seperti aturan umum untuk mikrokomputer masa-masa awal, atau saat ini sering disebut dengan 'single precision', umumnya tidak cukup untuk matematika astronomi.
Untuk banyak aplikasi, diperlukan mesin hitung melakukan dengan jumlah angka signifkan yang lebih banyak dari yang diinginkan pada hasil akhir. Mari kita perhatikan, misalnya, rumus berikut ini menghasilkan bujur rata-rata Bulan, L' untuk setiap waktu yang diinginkan, dalam derajat (Bab 45):
L' = 218.316 4591 + 481 267.881 342 36 T - 0.001 3268 T2 + 0.000 0019 T3
dimana T adalah waktu yang diukur dalam abad Julian 36525 hari berlalu sejak epoch standar 1.5 TD Januari 2000 (JDE 2451545.0). Misalkan sekarang, kita ingin mendapatkan bujur rata-rata Bulan dengan akurasi 0.001 derajat. Karena bujur selalu berada dalam Interval 0-360 derajat, orang mungkin berpikir bahwa mesin menghitung dengan hanya enam angka signifikan secara internal sudah memadai untuk tujuan tersebut (3 angka sebelum dan setelah tanda desimal). Dalam kasus ini tidaklah demikian, karena L' nilainya dapat mencapai nilai besar sebelum direduksi menjadi kurang dari 360 derajat.
Sebagai contoh, mari kita hitung L' untuk T = 0.4, yang berkorelasi dengan 1 Januari 2040 jam 12h TD. Kita dapatkan L' = 192 725°.469, yang direduksi menjadi 125°.469 adalah jawaban yang benar. Tetapi jika mesin bekerja dengan hanya enam angka signifikan, tidak akan menemukan L' = 192 725°.469, melainkan 192 725° (enam digit!), yang akan direduksi menjadi 125°, sehingga dalam hal ini hasil akhir hanya sampai derajat terdekat, dan kesalahannya adalah 0.469 derajat atau 28', dan ini terjadi hanya dalam waktu 40 tahun setelah permulaan epoch. Dalam keadaan seperti itu, tidaklah mungkin untuk menghitung gerhana atau okultasi.
Untuk mengetahui dengan akurasi internal pada mesin komputer, program pendek berikut (dalam BASIC) dapat digunakan.
10 X = 1
20 J = 0
30 X = X * 2
40 IF X + 1 <> X THEN 60
50 GOTO 80
60 J = J + 1
70 GOTO 30
80 PRINT J, J * O.30103
90 END
Di sini, J adalah jumlah bit yang signifikan dalam mantissa dari angka floating, sementara 0.30103 J adalah jumlah angka signifikan dalam angka desimal. Konstanta 0.30103 adalah log10 2. Misalnya untuk komputer HP-85 memberikan J = 39, dari mana 11.7 digit, dengan HP-UX Technical Basic 5.0, bekerja pada HP-Integral mikrokomputer, kita mendapatkan hasil J = 52, dari mana 15.6 intern digit. Program QUICKBASIC 4.5 memberikan J = 63, dari mana 19.0 digit.
Namun, akurasi ini hanya merujuk pada aritmatika sederhana, bukan fungsi trigonometri. Meskipun GWBASIC produk Toshiba memberikan hasil J = 55, yaitu 16.6 angka intern, memberikan sinus dengan hanya 7 desimal yang benar, 9 angka terakhir yang benar-benar salah!
Salah satu cara cepat untuk memeriksa ketepatan fungsi trigonometri adalah PRINT 4 * ATN (1). Jika komputer bekerja dalam radian, ini harus memberikan hasil yang dikenal dengan = 3.14 15 92 65 35 89 79 ... Atau seseorang dapat menghitung sinus dari sudut yang diketahui nilainya secara akurat, misalnya
SIN (0.61 rad) = 0.572 867 460 100 48 ...
Pembulatan dapat dihindari dalam komputer. Anggaplah misalnya nilai 1/3 = 0.33333333 ... Karena mesin tidak dapat menangani desimal tak terbatas, maka bilangan tersebut tentu saja harus dipangkas di suatu tempat.
Kesalahan pembulatan dapat menumpuk dari satu perhitungan ke perhitungan berikutnya. Dalam kebanyakan kasus, hal ini tidak penting karena satu sama lain menutupi kesalahan, namun dalam beberapa aplikasi ilmu hitung, kesalahan yang terkumpul dapat meningkat melebihi batas. Meskipun topik ini di luar cakupan buku ini, kita akan menyebutkan dua kasus.
Perhatikan program berikut:
10 X = 1/3
20 FOR I = 1 TO 30
30 X = (9 * X + 1) * X -1
40 PRINT I, X
50 NEXT I
60 END
Operasi pada baris 30 sebenarnya menggantikan X dengan sendirinya. namun pada
kebanyakan komputer hasilnya menyimpang. Disebutkan di atas HP-UX Technical Basic menghasilkan:
kebanyakan komputer hasilnya menyimpang. Disebutkan di atas HP-UX Technical Basic menghasilkan:
0.333 333 333 333 308 setelah 4 langkah
0.333 326 162 117 054 setelah 14 langkah
0.215 899 338 763 055 setelah 19 langkah
286.423 ... setelah 24 langkah
dan nilai dari urutan 10217 setelah 30 langkah! Perbedaan akurasi antara mikrokomputer atau bahkan kalkulator genggam dapat ditunjukkan dengan tes sederhana [2]: berulang kali mengkuadratkan 1.000 0001. Setelah 27 kali, hasilnya ke 10 angka penting harus 674 530.4707. Hasil untuk beberapa mesin atau bahasa pemrograman adalah sebagai berikut:
674 494.06 pada HP-67 kalkulator
674 514.87 pada HP-85
674 520.61 pada TI-58 kalkulator
674 530.4755 pada HP-Integral (HP-UX Techn. Basic)
674 530.4755 di QUICKBASIC 4.5
Tapi itu masih belum akhir cerita. Pada dasarnya, ada dua cara berbeda untuk representasi internal informasi numerik ke dalam komputer. Beberapa mesin, seperti HP-85 lama, menggunakan skema BCD atau Binary Coded Decimal (Kode Biner Desimal) untuk mempresentasikan Bilangan secara internal, tetapi dalam banyak kasus lain representasi biner digunakan.
BCD adalah skema dimana nilai sebenarnya dari setiap digit bilangan disimpan secara individual. Hal ini memungkinkan bilangan yang direpresentasikan secara tepat, untuk presisi sampai angka tertentu dari mesin yang dimaksudkan atau bahasa pemrograman. Biner, di sisi lain, merepresentasikan semua bilangan karena beberapa kombinasi pangkat dari 2. Dalam biner, fraksi juga direpresentasikan sebagai pangkat 2, sehingga tidak mungkin untuk merepresentasikan bilangan yang bukan kombinasi yang tepat dari pangkat negatif dari 2 di dalam sistem biner. Misalnya, 1/10 secara rasional tidak dinyatakan sebagai kombinasi pangkat negatif dari 2, karena 1/10 = 1/16 + 1/32 + 1/128 ...
Fungsi aritmatika biner biasanya lebih cepat dalam eksekusinya dibandingkan dengan BCD lain, tetapi ketidaknyamanannya adalah bahwa beberapa bilangan, bahkan dengan bilangan kecil desimal, tidak direpresentasikan tepat.
Akibatnya, hasil dari operasi aritmatika bisa saja salah, bahkan ketika bilangan hanya beberapa desimal saja. Misalkan X = 4.34. Kemudian hasil yang benar dari operasi H = (INT 100 * (X - INT (X))) adalah 34. Namun, banyak bahasa komputer menghasilkan H = 33. Alasannya bahwa dalam kasus ini nilai X adalah direpresentasikan secara internal sebagai 4.3399999998, atau semacamnya. Contoh lain yang mengejutkan adalah
2 + 0.2 + 0.2 + 0.2 + 0.2 + 0.2 - 3.
Pada banyak komputer, hasilnya tidak nol! Di HP-Integral, menggunakan HP-UX Technical Basic 5.0, hasilnya adalah 8.88 x 10-16. Tetapi pada mesin yang sama 0.2 + 0.2 + 0.2 + 0.2 + 0.2 + 2 - 3 menghasilkan nol, sehingga urutan di mana operasi dilakukan dapat menjadi sangat penting di sini!
Anehnya, 2 + (5 * 0.2) - 3 memberikan hasil persis nol pada HP-Integral, dan begitu juga dengan berikut:
A = 0.2 + 0.2 + 0.2 + 0.2 + 0.2
B = 2 + A
C = B - 3
PRINT C
Perhatikan program berikut:
10 FOR I = 0 TO 100 STEP 0.1
20 U = I
30 NEXT I
40 PRINT U
50 END
Di sini, I dan U mengambil nilai-nilai yang berurutan dari 0 sampai 100 dengan langkah-langkah 0.1, dan nilai terakhir dari U harus persis 100. HP-85 tidak menghasilkan 100 memang, Tetapi HP-Integral memberikan 99.999 999 999 9986, yang dapat memiliki konsekuensi berbahaya dalam beberapa aplikasi. Kesalahan akibat fakta bahwa nilai langkah 0.1 diterjemahkan ke dalam biner sebagai 0.0999999. Bedanya dengan 0.1 sangat kecil tetapi, karena ada 1000 langkah, kesalahan terakhir menjadi 1000 kali lebih besar dari perbedaan kecil. Dalam kasus ini, masalahnya dapat diatasi dengan mengambil nilai bilangan bulat untuk langkah:
10 FOR J = 0 TO 1000
20 I = J/10
30 U = I
40 NEXT J
50 PRINT U
60 END
Kita mungkin mendapatkan kejutan lain dengan
A = 3 * (1 / 3)
PRINT INT (A)
Hasil yang benar adalah 1 pada beberapa komputer, tetapi nol pada komputer lain. Atau coba, misalnya, A = 0.1, PRINT INT(1000 * A)
Tes lain yang menarik adalah
INPUT A
B = A/10
C = 10 * B
PRINT A - C
Hasilnya harus nol. Tetapi untuk beberapa bilangan A jawabannya bisa berbeda. Salah satu cara mudah untuk mengetahui apakah bahasa komputer bekerja di BCD atau tidak, lihatlah kemungkinan nilai bilangan bulat terbesar (yang adalah, bilangan didefinisikan sebagai INTEGER). Jika demikian adalah bilangan 'bulat yang bagus', maka hal ini menunjukkan bahwa mesin bekerja di BCD. Sebagai contoh, pada HP-85 di mana bilangan bulat terbesar adalah 99 999 (atau 105 - l). Tetapi jika bilangan bulat terbesar adalah bilangan yang 'aneh' (pada kenyataannya, pangkat dari 2 kemudian dikurangi satu), maka ini berarti bahwa komputer tidak bekerja di BCD. Pada TRS-80 lama, bahwa bilangan bulat terbesar adalah 32 767 (atau 215 - 1), sementara untuk HP-UX Technical Basic 5.0 pada HP-Integral itu 2 147 483 647 (atau 231 - 1).
Pembulatan pada aritmatika yang tidak eksak dapat menghasilkan sesuatu yang mengejutkan yang lain. Pada kebanyakan mikrokomputer, hasil SQR (25) - 5 tidak nol! Ini bisa menjadi masalah jika pengujian pada hasil. Apakah 25 merupakan kwadrat sempurna? Orang mungkin berpikir jawabannya adalah tidak, karena komputer memberitahu kita bahwa SQR (25) - INT (SQR (25)) tidak nol!
Pembulatan hasil akhir
Hasil akhir harus dibulatkan dengan benar dan bermakna, sesuai dengan tujuan yang diinginkan. Pembulatan harus dilakukan dengan nilai terdekat. Misalnya, 15.88 yang akan dibulatkan menjadi 15.9, atau 16, bukan 15. Namun, tanggal dan tahun kalender adalah pengecualian. Misalnya, 15.88 Maret menunjukkan suatu tanggal tertentu, yakni 15 Maret: itu berarti 0.88 hari setelah tanggal 15 Maret jam 0h. Jadi, jika kita membaca bahwa suatu peristiwa terjadi pada tanggal 15.88, itu terjadi pada tanggal 15 Maret, bukan pada 16 Maret. Demikian pula, 1977.69 menunjukkan sekejap milik tahun 1977, bukan 1978.
Hanya angka yang bermakna harus dipertahankan. Misalnya, Rumus Muller untuk menghitung besarnya Jupiter secara visual adalah:
m = -8.93 + 5 log r
dimana r adalah jarak Jupiter ke Matahari, jarak ke Bumi (keduanya dalam unit astronomi), dan logaritma dengan basis 10. Sekarang, pada 14 Mei 1992 pada jam 0h TD, kita memiliki:
r = 5.417 149
dari mana m = -1.712 514 898. Namun menyebutkan semua desimal tersebut, di bawah dalih bahwa mereka dihasilkan oleh komputer, akan menjadi konyol dan akan memberikan pembaca kesan palsu seolah akurasi tinggi. Karena konstanta -8.93 dalam rumus Muller diberikan dalam magnitudo 0.01, tidak ada hasil dengan akurasi yang lebih tinggi yang dapat diharapkan. Dan di setiap kasus, fenomena meteorologi di atmosfer Jupiter adalah sedemikian rupa sehingga besarnya planet raksasa tidak bisa diprediksi dengan akurasi yang lebih baik dari 0.01 atau bahkan 0.1.
Sebagai contoh lain, John Mosley [3] menyebutkan program komersial yang tersedia menghasilkan waktu terbit dan terbenam benda langit sampai 0.1 detik, yang mustahil tepat.
Beberapa 'perasaan' dan pengetahuan astronomi yang cukup diperlukan di sini. Misalnya, akan menjadi benar-benar tidak relevan untuk memberikan fraksi piringan Bulan yang bercahaya akurat sampai 0.000 000 001.
Pembulatan harus dilakukan setelah seluruh perhitungan didapatkan, tetapi tidak sebelum memulai atau sebelum memasukkan data ke komputer.
Contoh: Hitung 1.4 + 1.4 ke bilangan bulat terdekat. Jika kita pertama membulatkan bilangan-bilangan yang dimasukan, kita memperoleh 1 + 1 = 2. Kenyataannya, 1.4 + 1.4 = 2.8, yang akan dibulatkan menjadi 3.
Berikut adalah contoh lain. Pada tanggal terjadinya oposisi, 18 Juli 1996 deklinasi Neptunus adalah = -20°24'. Berapa ketinggian planet hm pada saat transit melalui meridian selatan, di Sonneberg Observatory, Jerman, ke derajat terdekat? lintang Observatorium itu adalah = +50°23'. Rumus yang digunakan adalah
hm = 90° -
Jawabannya adalah hm = 90° - 50° 23'- 20° 24' = 19° 13', menjadi 19°.
Pembulatan dan ke derajat terdekat sebelum perhitungan akan memberikan hasil yang salah 90° - 50° - 20° = 20°. Sebuah kesalahan yang sama terjadi ketika jarak, dibulatkan ke kilometer terdekat, akan dikonversi ke kilometer. Dalam hal ini, misalnya nilai 17 km, tidak akan pernah tercapai, karena
10 mil akan memberikan 16.09 km, yang dibulatkan menjadi 16 km,
11 mil akan memberikan 17.70 km yang dibulatkan menjadi 18 km.
Askensio Rekta dan deklinasi - Karena 24 jam berkorelasi dengan 360 derajat, satu jam berkorelasi dengan 15°, satu menit dari waktu berkorelasi dengan 15 menit busur, dan satu detik waktu berkorelasi dengan 15 detik busur: selama interval waktu satu detik Bumi berputar melintasi 15".
Untuk alasan ini, jika deklinasi benda langit diketahui, misalnya, untuk 1", maka Askensio Rekta harus dinyatakan dalam waktu sepersepuluh detik terdekat, jika tidak maka deklinasi akan diberikan dengan akurasi jauh lebih besar daripada Askensio Rekta. Tabel berikut memberikan perkiraan korelasi antara akurasi dari Askensio Rekta ( ) dan deklinasi ( ). Misalnya, jika diberikan dengan akurasi 1', maka harus diberikan dalam waktu 0.1 menit terdekat. Sebagai contoh, kita presentasikan posisi Nova Cygni 1975 dengan akurasi yang berbeda.
Pada
|
Pada
|
Contoh (Nova Cygni 1975)
| |
1m
0m.1
1s
02.1
|
0°.1
1'
0'.1
1"
|
21h09m.9
21h09m53s
21h09m52s.8
|
+47°57'
+47°56'.7
+47°56'41"
|
Sebagai catatan akhir, kita nyatakan bahwa menghilangkan nol bisa merupakan hal penting. Misalnya, 18.0 adalah tidak sama dengan 18. Nilai sebelumnya berarti bahwa jumlah sebenarnya terletak antara 17.95 dan 18.05, sedangkan nilai kedua telah dibulatkan ke bilangan bulat terdekat dan dapat berarti sama dengan bilangan antara 17.5 dan 18.5. Untuk alasan ini, angka nol harus disertakan dalam hasil untuk menunjukkan akurasi: bintang besarnya 7 tidak sama sebagai bintang besarnya 7.00.
Daftar Pustaka
1. John Mosley, Sky and Telescope, Vol. 78, hal. 300 (September 1989).
2. F. Gruenberger, 'Computer Recreation', Scientific American, Vol. 250, hal. 10 (April 1984).
3. John Mosley, Sky and Telescope, Vol. 81, hal. 201 (Februari 1991).
translate by : Dr.-Ing. Khafid.
Dosen Pascasarjana Ilmu Falak
UIN Walisongo-Semarang
No comments:
Post a Comment