Saya sedang mengerjakan proyek pribadi kecil (menargetkan Propeller Parallax, tetapi ini harus cukup digeneralisasikan) yang membutuhkan matematika floating point.
Kontroler mikro yang bekerja dengan saya tidak memiliki titik apung asli, atau perpustakaan titik apung.
Apakah ada sumber daya yang baik atau tutorial tentang penerapan perangkat lunak matematika floating-point? Lebih disukai pada sumber daya yang sangat terbatas (Saya bahkan tidak punya setumpuk!).
Saya ingin mendukung double
pelampung berukuran besar. Baling-baling adalah MCU 32 bit, jadi saya harus menggunakan beberapa variabel untuk setiap float.
Saya tahu ada satu perangkat lunak floating-point library untuk baling-baling di luar sana, tetapi hanya mendukung single
ukuran mengapung.
Tidak, saya mungkin tidak benar-benar membutuhkan double
pelampung berukuran besar, tetapi ini terdengar seperti proyek yang sangat menarik. Setengah alasan saya ingin melakukan ini adalah karena saya akan belajar banyak di sepanjang jalan.
sumber
Jawaban:
Jika Anda ingin melakukannya sendiri, saya katakan lakukan saja.
Saya kira Anda tidak akan menemukan terlalu banyak sumber daya atau tutorial karena tidak banyak.
Berikut ini garis besarnya:
tambah / kurangi:
jika eksponen berbeda terlalu banyak (lebih dari mantissa memiliki bit):
cukup kembalikan nilainya dengan eksponen yang lebih besar (jika ini adalah subtrahend: negate)
jika eksponen serupa:
pindahkan mantissa dengan nilai lebih kecil dengan perbedaan pangkat dan tambahkan / kurangi dari mantissa lain (menggunakan aritmatika titik tetap)
jika hasilnya bukan 0: pindahkan mantissa hingga MSBit hasil adalah 1 dan kurangi eksponen jumlah yang sama
perkalian / pembagian:
gandakan / bagi mantisa (menggunakan aritmatika titik tetap) dan tambahkan / kurangi eksponen
sumber
Anda harus dapat menggunakan ini beberapa presisi floating-point perpustakaan di Propeller, dengan baik Catalina C atau gcc. Mungkin terlalu lambat untuk banyak aplikasi.
sumber
Sepertinya pertanyaan ini diambil untuk mencari pemahaman lebih dari menyelesaikan masalah, jadi ini mungkin bukan jawaban yang paling berguna, tetapi hanya demi kelengkapan
http://code.google.com/p/propgcc/wiki/PropGccCompileOptions
Menyiratkan bahwa versi baling-baling GCC memiliki dukungan floating point, termasuk ganda.
GCC dan perpustakaan kompilernya tentu saja open source, meskipun mungkin ada kurva pembelajaran nyata sebelum Anda bisa mulai melihat apa yang dilakukan kode.
sumber