Saat ini saya sedang belajar tentang konstruksi kompiler dan desain bahasa dan saya berpikir tentang tipe data asli apa yang ingin saya dukung dalam bahasa saya. Sekarang ada banyak bahasa yang membuat perbedaan antara bilangan bulat dan bilangan real. Namun, saya ingat menonton ceramah oleh Douglas Crockford di mana dia berkata:
Memiliki jenis nomor tunggal dalam sistem berarti Anda tidak dapat membuat bug dengan memilih jenis nomor yang salah
Dia juga menyebutkan bahwa dia merekomendasikan representasi angka yang berbeda dengan IEEE-754 yang biasa digunakan (tolong perbaiki saya jika saya salah), yaitu DEC64. Karena itu pertanyaan saya: Untuk bahasa tujuan umum yang memiliki fokus pendidikan utama, representasi nomor apa yang harus saya gunakan?
EDIT: Dengan fokus pendidikan saya berbicara tentang kemajuan saya sendiri dalam belajar tentang kompiler, bukan untuk mendidik orang lain.
sumber
Jawaban:
Kami memiliki representasi angka yang berbeda secara umum karena mereka memiliki kekuatan dan kelemahan yang berbeda, baik itu kecepatan, presisi, atau jangkauan. Juga ini harus menjadi kasus karena kita tidak dapat mewakili semua bilangan real dengan memori yang terbatas, kita selalu harus memilih beberapa yang tidak dapat kita wakili dengan tepat.
Kutipan Doug Crockford yang Anda miliki adalah idiot batas, jika Anda hanya dapat memilih satu representasi, OK, Anda tidak dapat memilih yang salah, tetapi Anda juga tidak dapat memilih yang benar. yaitu satu-satunya pilihan Anda akan bekerja untuk beberapa penggunaan tetapi tidak untuk semua.
Memang benar bahwa beberapa representasi mungkin lebih baik karena pilihan goto pertama DEC64 terlihat masuk akal di sini. Ini adalah representasi floating point desimal, sehingga akan kurang mengejutkan daripada IEEE-754 (yang merupakan floating point biner) dalam kebanyakan situasi karena orang cenderung berpikir dalam desimal misalnya dapat mewakili 0,3 persis. Itu masih akan memiliki masalah representasi dalam beberapa keadaan misalnya menambahkan jumlah yang sangat besar dan sangat kecil bersama-sama
untuk bacaan lebih lanjut saya akan menyarankan Richard Harris 'serangkaian artikel' mengapa X tidak akan memperbaiki Anda memamerkan titik blues '
sumber
Untuk bahasa umum, angka harus berperilaku seperti yang diajarkan di kelas matematika. Hanya bahasa tujuan khusus, seperti yang untuk driver perangkat, yang harus memiliki matematika khusus.
Saya akan merekomendasikan menggunakan angka presisi sembarang daripada yang presisi tetap. Ya, mereka lebih lambat tetapi mereka berperilaku seperti orang-orang mengharapkan angka untuk berperilaku. Menempatkan batas buatan pada mereka akan dilaporkan sebagai bug.
sumber