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
>> >> >>
>> >>
>>

Reply via email to