Bagaimana unums meniru nol negatif IEEE?

9

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 )

Salah
sumber
1
Mengapa Anda berpikir bahwa pemetaan harus 1 banding 1? Alasan yang disebutkan dalam pertanyaan yang Anda tautkan bukan masalah dengan unums, jadi mengapa membuat nol negatif?
Biasa
@Ordous: Karena (Ch.18.1, p.257) "Unums adalah superset dari floats. Floats adalah unums yang ubitnya nol dan sebagainya." yang semua (termasuk 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.
false
5
Cukup sulit untuk membantah kutipan tanpa memiliki buku di tangan. Namun slide-nya dalam presentasi IEEE dinyatakan sebagai keuntungan dari komputasi unum: "Tidak perlu underflow". Oleh karena itu: tidak perlu untuk nol negatif, karena justru underflow. Mungkin Anda dapat memperluas sistem ini dengan memasukkan nol negatif, tetapi tidak ada alasan untuk melakukannya. Jujur 0 negatif di IEEE tidak konsisten dengan matematika .
Biasa
@Ordous: Underflow ditangani oleh interval terbuka (-smallsubnormal, 0) dan pasangan positifnya. Jadi ini adalah hal yang paling dekat dengan -0 dan +0. Tetapi bisakah interval ini benar-benar bertindak seolah-olah?
false
8
Underflow tidak "ditangani" di sini, hanya saja tidak ada . Negatif 0 adalah masalah di IEEE dan standar ini mencoba untuk memperbaikinya bersama dengan hal-hal lain. Anda tidak bisa dan tidak boleh menyamakan -0 dan +0, tetapi karena di IEEE perbedaannya adalah 0, mereka harus sama. Paradoks ini tidak memiliki solusi yang baik. Dalam Unums mereka lakukan memiliki perbedaan, maka mereka tidak bisa sama. Inti dari sistem ini adalah untuk memperbaiki masalah di IEEE, tetapi itu berarti itu tidak konsisten dengannya. Ini adalah salah satu dari inkonsistensi tersebut. Dan alasannya ada sistem built-in yang diusulkan untuk menggunakan standar lama dalam bukunya.
Ordous

Jawaban:

3

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:

  • nilai negatif, nilai absolut terlalu kecil untuk diwakili - ini diwakili oleh IEEE -0.0 dan mungkin mudah dipetakan (-smallsubnormal,0)
  • nilai persis nol, diwakili oleh IEEE 0.0, dipetakan ke 0
  • nilai positif terlalu kecil untuk diwakili; yang ini memiliki representasi IEEE 0,0 juga tetapi harus dipetakan ke (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 dipetakan 0atau 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 ...

Aconcagua
sumber