Hello, I have a question about the constant folding for fdiv instructions. For the instruction "fdiv double 0.0, 0.0", the folded result is inf. I think this should be nan. Can anyone tell me why it is not nan?
Thanks.
Leo
Hello, I have a question about the constant folding for fdiv instructions. For the instruction "fdiv double 0.0, 0.0", the folded result is inf. I think this should be nan. Can anyone tell me why it is not nan?
Thanks.
Leo
Hello, I have a question about the constant folding for fdiv instructions.
For the instruction "fdiv double 0.0, 0.0", the folded result is inf. I
think this should be nan. Can anyone tell me why it is not nan?
I think the specification says that it is "undefined" so any value will
do. inf is just as undefined as nan.
Reid.
I seem to recall that gcc's interpretation of undefined in this
situation is also inf.
Andrew
Reid Spencer wrote:
Hello, I have a question about the constant folding for fdiv instructions. For the instruction "fdiv double 0.0, 0.0", the folded result is inf. I think this should be nan. Can anyone tell me why it is not nan?I think the specification says that it is "undefined" so any value will do. inf is just as undefined as nan. Reid.
In IEEE Std 754-1985, subclause 7.2- Division by Zero, it says:
“If the divisor is zero and the dividend is a finite nonzero number, then the division by zero shall be signaled. The result, when no trap occurs, shall be a correctly signed (infinity symbol)(6.3).”
So LLVM is correct (assuming it handles signs correctly).
Jeff Cohen wrote:
Reid Spencer wrote:
Hello, I have a question about the constant folding for fdiv instructions. For the instruction "fdiv double 0.0, 0.0", the folded result is inf. I think this should be nan. Can anyone tell me why it is not nan?I think the specification says that it is "undefined" so any value will do. inf is just as undefined as nan. Reid.In IEEE Std 754-1985, subclause 7.2- Division by Zero, it says:
“If the divisor is zero and the dividend is a finite nonzero number, then the division by zero shall be signaled. The result, when no trap occurs, shall be a correctly signed (infinity symbol)(6.3).”
So LLVM is correct (assuming it handles signs correctly).
Never mind… only applies if a non-zero number is being divided by zero.
Jeff Cohen wrote:
Jeff Cohen wrote:
Reid Spencer wrote:
Hello, I have a question about the constant folding for fdiv instructions. For the instruction "fdiv double 0.0, 0.0", the folded result is inf. I think this should be nan. Can anyone tell me why it is not nan?I think the specification says that it is "undefined" so any value will do. inf is just as undefined as nan. Reid.In IEEE Std 754-1985, subclause 7.2- Division by Zero, it says:
“If the divisor is zero and the dividend is a finite nonzero number, then the division by zero shall be signaled. The result, when no trap occurs, shall be a correctly signed (infinity symbol)(6.3).”
So LLVM is correct (assuming it handles signs correctly).
Never mind… only applies if a non-zero number is being divided by zero.
The standard apparently doesn’t explicitly handle 0/0, but the position of the IEEE appears to be that it should yield a NaN of the appropriate sign. See
Jeff Cohen wrote:
The standard apparently doesn’t explicitly handle 0/0, but the position of the IEEE appears to be that it should yield a NaN of the appropriate sign. See
OK, it does explicitly handle it. My reading comprehension seems to be lacking right now ![]()
The above lists all operations that yield a NaN.
Sounds like a bug, please file it or fix it
The code in question is VMCore/ConstantFold.cpp:654. It should produce the appropriately signed NaN instead of Inf.
-Chris