I don't know why you expect them to print the same, when they are not the same value.
-0.0 is a Float64, so IEEE arithmetic applies and sqrt(-0.0) is -0.0. sqrt(-0) is equal to sqrt(0), because 0 is an Int64 so it is negated first. Best, Tamas On Fri, Dec 19 2014, Hans W Borchers <[email protected]> wrote: > Oh, you're right. I was afraid my remembrance would not be right. > I'm not so happy that -0.0 is not printed as -0.0 because mathematically > there is no difference, and the Julia community puts much emphasis on this. > > And especially I feel uneasy with these returns: > > julia> sign(-0.0) > -0.0 > > julia> sqrt(-0) > 0.0 > > where `sqrt(-0.0)` and `sqrt(-0)` should print the same? > > > On Friday, December 19, 2014 3:52:46 PM UTC+1, Tamas Papp wrote: >> >> Nope, as far as I can see Julia is IEEE-compliant. So is R, under the >> hood, it just does not display signed zeros as such. I prefer that Julia >> does it. >> >> Best, >> >> Tamas >> >> On Fri, Dec 19 2014, Stefan Karpinski <[email protected] <javascript:>> >> wrote: >> >> > So is there anything here we're not doing correctly? >> > >> > On Fri, Dec 19, 2014 at 7:54 AM, Tamas Papp <[email protected] >> <javascript:>> wrote: >> > >> >> On Fri, Dec 19 2014, Hans W Borchers <[email protected] <javascript:>> >> wrote: >> >> >> >> > The expression -0.0 means the floating point number that in memory >> has >> >> the >> >> > same >> >> > bit representation as 0.0, but the sign bit set to 1. One can see >> this >> >> > applying >> >> > the 'bits' function to 0.0 and -0.0. >> >> > >> >> > I seem to remember that the IEEE floating point convention says that >> for >> >> > `sqrt(-0.0)` the sign bit has to be reset, so that >> >> > >> >> > julia> sqrt(-0.0) >> >> > -0.0 >> >> > >> >> > would be wrong while MATLAB, R,... returning 0.0 are correct. >> >> >> >> I don't think so. Section 6.3 of the IEEE Std 754TM-2008 says that >> >> >> >> "Except that squareRoot(−0) shall be −0, every numeric squareRoot >> result >> >> shall have a positive sign. >> >> >> >> Furthermore, you can't rely on R to display the sign bit, eg >> >> >> >> > 1/(-Inf) >> >> [1] 0 >> >> >> >> Best, >> >> >> >> Tamas >> >> >> >> >> >> > The expression -0.0 means the floating point number that in memory >> has >> >> the >> >> > same >> >> > bit representation as 0.0, but the sign bit set to 1. One can see >> this >> >> > applying >> >> > the 'bits' function to 0.0 and -0.0. >> >> > >> >> > I seem to remember that the IEEE floating point convention says that >> for >> >> > `sqrt(-0.0)` the sign bit has to be reset, so that >> >> > >> >> > julia> sqrt(-0.0) >> >> > -0.0 >> >> > >> >> > would be wrong while MATLAB, R,... returning 0.0 are correct. >> >> > >> >> > For `1/-Inf` the sign bit is not reset because this expression should >> be >> >> > the >> >> > limit of 1/-x for very large numbers x, i.e. approaching 0 from left. >> >> > >> >> > >> >> > On Friday, December 19, 2014 12:13:57 PM UTC+1, Tamas Papp wrote: >> >> >> >> >> >> Hmmm, did you read the whole blog post, including the update at the >> end? >> >> >> Julia does handle signed zeroes correctly when working with floats. >> >> >> >> >> >> As to what signed zeros "mean" -- they have some applications, >> including >> >> >> indicating the direction of underflow. Probably you don't need to >> worry >> >> >> about them much since 0.0 == -0.0 (unless you specifically want to >> use >> >> >> them). >> >> >> >> >> >> I usually think about -0.0 as equivalent to 0.0 except for +, -, *, >> and >> >> >> /, especially when Inf is involved. Thinking about it as some limit >> is >> >> >> not very intuitive for IEEE floats, eg >> >> >> >> >> >> julia> log(-0.0) >> >> >> -Inf >> >> >> >> >> >> julia> sqrt(-0.0) >> >> >> -0.0 >> >> >> >> >> >> all of which are correct IEEE. >> >> >> >> >> >> Best, >> >> >> >> >> >> Tamas >> >> >> >> >> >> >> >> >> On Fri, Dec 19 2014, cdm <[email protected] <javascript:>> wrote: >> >> >> >> >> >> > i stumbled across a post and got to wondering what Julians thought >> of >> >> it >> >> >> ... >> >> >> > >> >> >> > http://www.walkingrandomly.com/?p=5152 >> >> >> > >> >> >> > >> >> >> > the author presents the case that Python is not IEEE compliant, >> but >> >> >> > MATLAB is and Julia is close: >> >> >> > >> >> >> > "From the wikipedia page on Division by Zero >> >> >> > <http://en.wikipedia.org/wiki/Division_by_zero>: *“The IEEE 754 >> >> >> > standard specifies that every floating point arithmetic operation, >> >> >> > including division by zero, has a well-defined result”.* >> >> >> > >> >> >> > >> >> >> > the author reports that in Julia >> >> >> > >> >> >> > julia> 1/(-0) >> >> >> > Inf >> >> >> > >> >> >> > >> >> >> > but MATLAB "correctly" returns -Inf ... >> >> >> > >> >> >> > >> >> >> > i am not sure that signed zero (-0) >> >> >> > means anything to me ... >> >> >> > >> >> >> > should it? >> >> >> > >> >> >> > many thanks, >> >> >> > >> >> >> > cdm >> >> >> >> >> >>
