--
You received this message because you are subscribed to the Google Groups "Unum Computing" group.
To unsubscribe from this group and stop receiving emails from it, send an email to unum-computin...@googlegroups.com.
To post to this group, send email to unum-co...@googlegroups.com.
To view this discussion on the web visit https://groups.google.com/d/msgid/unum-computing/31a1220f-27b8-422f-a39c-c4532c399d69%40googlegroups.com.
For more options, visit https://groups.google.com/d/optout.
]a=. 3.2e7 1 _1 8.0e7
32000000 1 _1 80000000
b=. 4.0e7 1 _1 _1.6e7
a +/ . * b
2
]a=. 3.2e8 1 _1 8.0e8
320000000 1 _1 800000000
b=. 4.0e8 1 _1 _1.6e8
a +/ . * b
2
]a=. 32e9 1 _1 8.0e9
32000000000 1 _1 8000000000
b=. 4.0e9 1 _1 _16e9
a +/ . * b
0
Thank you for catching a transcription error. The example should be 32e7, not 3.2e7, and –16e7, no –1.6e7. Then the rounding behaves as described. I will correct my slide set!
The regime bits and exponent bits are independent.
If you look at any binary number, after the initial sign bit, it will have some number of identical bits at the start. Maybe just one bit. Or perhaps five zeros in a row, then a one. Those are the regime bits, terminated by the opposite bit.
The next es bits are the exponent bits, and to match the dynamic range of floats, I'm recommending this table:Size es value16 132 364 4128 7256 10
--
You received this message because you are subscribed to the Google Groups "Unum Computing" group.
To unsubscribe from this group and stop receiving emails from it, send an email to unum-computin...@googlegroups.com.
To post to this group, send email to unum-co...@googlegroups.com.
To view this discussion on the web visit https://groups.google.com/d/msgid/unum-computing/d031053a-af33-4347-815d-f08e403cbf00%40googlegroups.com.
My intention is to standardize on these es values for the reasons you say. The idea is to create a true standard, with bit-identical, reproducible results across systems. If you want to just do a drop-in replacement for IEEE floats, the table of es values should do the job.
[...]
If someone builds, say, a custom chip for Deep Learning, they might want to use a 10-bit posit with an es value of zero. You need not be restricted to standard bit widths and dynamic ranges for such things.
--
You received this message because you are subscribed to the Google Groups "Unum Computing" group.
To unsubscribe from this group and stop receiving emails from it, send an email to unum-computin...@googlegroups.com.
To post to this group, send email to unum-co...@googlegroups.com.
To view this discussion on the web visit https://groups.google.com/d/msgid/unum-computing/58c1e705-3e7b-499c-86e0-bd443ab7b111%40googlegroups.com.
When you say you are unhappy with exceptions, I believe you are expressing a favorable opinion of posits, correct?
The case I'm imagining is... a video game. It's raining and the player looks up for whatever reason. By chance, they look perfectly up, making something zero. Then, later in the calculations, that gets divided by zero and, since the authors decided to use these new-mangled posit thingies, an unexpected exception gets thrown and the program just crashes.
Firstly, I don't get how the regime bits work. It seems that they serve as a unary count of the exponent bits. Seems.
Almost correct - the bits '10' are encoded as 0, '110' as 1, and so on; but '01' is -1, '001' is -2, and so on. Zero introduces a necessary asymmetry.
--
You received this message because you are subscribed to the Google Groups "Unum Computing" group.
To unsubscribe from this group and stop receiving emails from it, send an email to unum-computin...@googlegroups.com.
To post to this group, send email to unum-co...@googlegroups.com.
To view this discussion on the web visit https://groups.google.com/d/msgid/unum-computing/dbf3c88a-6a13-4a5b-a745-39afe46b910a%40googlegroups.com.
Almost correct - the bits '10' are encoded as 0, '110' as 1, and so on; but '01' is -1, '001' is -2, and so on. Zero introduces a necessary asymmetry.
To view this discussion on the web visit https://groups.google.com/d/msgid/unum-computing/CAFTBfO7V%3D%3DT2dpngSinLnxbtvYvM9Eu1AbcD4dyNEG%2B72Y0jLQ%40mail.gmail.com.
To view this discussion on the web visit https://groups.google.com/d/msgid/unum-computing/F828CF6C-0FB7-4A1A-BCEC-C66DDBA8CD0D%40earthlink.net.
Almost. It's (2^2^es)^r.
However one thing which I keep nagging me is losing signed infinities... I know some methods rely on them, for example this fast ray-AABB intersection test[1].
For posits, x/0 returns ±∞ unless x is zero, in which case it halts, that is, it signals a NaN. What happens next is up to the operator, but it makes no sense to continue computing. If this can occur in an application, it is an indication that the application is not yet debugged, since an exception like that is obviously preventable by putting an IF test in the code just before the divide, to protect against an unwanted interrupt.Video games are VERY thoroughly tested, though I have had the experience of walking Turok between two rocks such that he could not get out, and I had to reset the game!
During development of an application, indeterminate forms might be produced like 0/0, ±∞ + ±∞, 0 * ±∞, and there also might be questions of accuracy; this is when you use valid representation, pairs of posits that indicate a start and end point on the projective reals. These work like Type 1 or Type 2 unums, with an uncertainty bit after the last significant bit of the fraction, and the width of the range allows detection of loss of information since valids keep track of their own accuracy. Valids can handle NaN situations without a hiccup, since they can represent the empty set (frequently a good substitute for having a quiet NaN) or the entire extended real number line (which is what 0/0, ±∞ + ±∞, 0 * ±∞ are, regarded as limits).So if you find yourself needing to compute with NaN, it probably means you are still developing the app and should be using valids, Once there is no possibility of exception conditions, you can switch to posits and run at full speed.
I've been working on some hardware implementations - and I have made some very important discoveries. The biggest one is that having a two's complement negative means that your add/subtract bifurcates into only two conditions instead of four. You can imagine how already being in two's complement simplifies addition/subtraction, but that it might muck up multiplication. As it turns out, multiplication is rescued with a very slight tweak. Still need to think about division a bit, however, that is not currently a priority, my intuition given my understanding of the division algorithms, is that it also will *not* be a problem.
On a more whimsical note, I started wondering if the exponent bits were actually needed. I don't quite know what that would do, but the 32-bit example makes me wonder. Also, I think it might give total reciprocal closure. (I look forward to being told that I'm completely wrong on that.) Still, I assume you considered that and discarded it for practical reasons.
(You did consider it, right? Because I will feel very silly if you hadn't.)
--
You received this message because you are subscribed to the Google Groups "Unum Computing" group.
To unsubscribe from this group and stop receiving emails from it, send an email to unum-computin...@googlegroups.com.
To post to this group, send email to unum-co...@googlegroups.com.
To view this discussion on the web visit https://groups.google.com/d/msgid/unum-computing/5999CAF5-55B5-4DEE-A24D-E87646E55BDA%40nus.edu.sg.
I hope it makes sense to still answer a message this many weeks old.
It's symmetric to skip the infinity by also skipping zero. More likely to work with Valids than Posits, though.
--
You received this message because you are subscribed to the Google Groups "Unum Computing" group.
To unsubscribe from this group and stop receiving emails from it, send an email to unum-computin...@googlegroups.com.
To post to this group, send email to unum-co...@googlegroups.com.
To view this discussion on the web visit https://groups.google.com/d/msgid/unum-computing/c98cc569-e4b7-4c93-a85c-d156c81595d5%40googlegroups.com.