[RFC] Acceptable input ranges
kimikage opened this issue · 2 comments
When fixing the issue #102 (PR #131), I changed the acceptable input range for Normed
as follows:
FixedPointNumbers.jl/src/normed.jl
Lines 69 to 74 in 7ad0f0c
(typemax(T)-rawone(U))/rawone(U)+1
essentially means typemax(T)/rawone(U)
.
The decision is based, for example, on the idea that the range of N0f8
should be [0, 1]. In particular, regarding the lower bound, I believe that the Normed
s should not accept negative inputs since the current Normed
s are unsigned types.
However, the following is also true:
julia> round(UInt8, 1.0019607843137253 * 255) # typemax(UInt8)/rawone(N0f8) == 1
0xff
julia> round(UInt8, -0.00196078431372549 * 255)
0x00
So, I don't know whether the acceptable input range of Q0f7
should be [-1, 127/128] , or [-128.5/128, 127.5/128).
Accepting inputs less than typemin
or greater than typemax
causes a bit confusing, and it is nonsense especially if the input type is not based on the binary numeral system. On the other hand, it seems to be a desirable property that the difference between the upper and lower bounds is a power of two.
BTW, I do not fully understand the original intent of this test. (0.498 ≈ 127.488/256
, 127/256 ≈ 0.49609375
)
FixedPointNumbers.jl/test/fixed.jl
Lines 95 to 100 in 7ad0f0c
Edit:
The test code will be changed to a = Q0f7[0.75, 0.5]
by PR #159.
For the time being, I decided to allow the wider range than [typemin
, typemax
] for Fixed
types.