Saya sedang membaca "The End of Error - Unum Computing" oleh John Gustafson ( Youtube ). Yang saya masih tidak yakin tentang bagaimana kasus-kasus yang ditangani di IEEE dengan nol ditandatangani negatif ditangani dengan unums.
Jadi, pertama-tama, unums memungkinkan untuk merepresentasikan nilai eksak tertentu (mirip dengan floating point) dan juga mengizinkan untuk mewakili interval terbuka yang terletak di antara nilai eksak (termasuk eksak -∞ dan ∞). Jadi garis bilangan real lengkap diwakili oleh berganti-ganti nilai yang tepat dan interval terbuka:
-∞, (-∞, -maxreal), -maxreal, ... -smallsubnormal, (-smallsubnormal, 0),
0,
(0, smallsubnormal), smallsubnormal, ... maxreal, (maxreal, ∞), ∞
Dengan cara ini (dalam tradisi IEEE) nilai luar biasa seperti underflow, dan overflow hanyalah beberapa interval terbuka. Dengan kata lain: kondisi-kondisi yang tadinya istimewa ini sekarang berubah menjadi kasus-kasus biasa.
-∞ IEEE berhubungan dengan penyatuan {-∞} dan (-∞, -maxreal).
Dan nol yang ditandatangani sekarang mungkin interval (-smallsubnormal, 0) dan (0, smallsubnormal).
Namun, 1 / (- smallsubnormal, 0) sekarang (-∞, -maxreal) dan tidak -∞ sendirian. Sedangkan 1/0 adalah ∞.
Apa yang saya masih ragu tentang ini adalah bahwa pada IEEE -0 dan +0 bandingkan dengan yang sama. Tetapi mereka tidak dalam unum. Tampaknya pemetaan itu bukan 100%. Jadi saya bertanya-tanya apakah ada cornercases di mana perbedaannya dapat ditampilkan ((dan jika kasus-kasus itu benar-benar relevan))
(Saya menyadari Mengapa negatif nol penting? , Penggunaan untuk negatif nilai floating point )
sumber
guess
) menyarankan bahwa seseorang dapat lebih atau kurang (dan sebagai permulaan) menerjemahkan sesuatu secara harfiah. Saya sepenuhnya menyadari bahwa terjemahan literal tidak sepenuhnya memanfaatkan unums.Jawaban:
Terlalu panjang untuk dikomentari, jadi tulis ini sebagai jawaban ...
Masalah dengan IEEE adalah kita memiliki tiga kasus untuk dibedakan, tetapi hanya dua representasi untuk ini:
(-smallsubnormal,0)
0
(0, +smallsubnormal)
.Masalahnya sekarang bukan nol negatif, tetapi kita tidak bisa membedakan apakah IEEE 0,0 adalah kasus kedua atau ketiga! Dengan kata lain: Fungsi pemetaan dari Unum ke IEEE adalah tidak bijective - dan tidak akan pernah, karena untuk setiap nilai IEEE lain juga, kita tidak pernah tahu apakah itu adalah tepat atau satu interval!
Jadi saya pikir benar-benar baik untuk memetakan -0,0 ke
(-smallsubnormal,0)
, dan kita perlu memutuskan apakah IEEE 0,0 agak dipetakan0
atau mungkin lebih baik(0, +smallsubnormal)
. Saya pribadi cenderung ke yang pertama, tapi itu tidak terlalu otoritatif ...Adapun perbandingan dengan IEEE (-0,0 sama dengan 0,0): Seseorang harus (hampir) tidak pernah membandingkan untuk kesetaraan yang tepat pula (C atau C ++: == operator), tetapi hanya untuk nilai absolut perbedaan yang lebih kecil dari beberapa ambang batas yang sesuai. Masalah ini dieliminasi hanya sebagian bahkan dengan UNUMS, karena kita sekarang dapat membandingkan untuk kesetaraan yang tepat, jika u-bit tidak disetel, tetapi dengan itu diatur, kita masih tidak benar-benar tahu ...
sumber