(real? (* +i +i)) -> #f
Hi I am playing around with Guile 2.05 on Kubuntu 12.04, why : scheme@(guile-user)> (real? (* +i +i)) $13 = #f but : scheme@(guile-user)> (zero? (imag-part (* +i +i))) $14 = #t thxs -- View this message in context: http://old.nabble.com/%28real--%28*-%2Bi-%2Bi%29%29--%3E--f-tp34250234p34250234.html Sent from the Gnu - Guile - User mailing list archive at Nabble.com.
Re: (real? (* +i +i)) -> #f
JihemD writes: > Hi > I am playing around with Guile 2.05 on Kubuntu 12.04, > why : > scheme@(guile-user)> (real? (* +i +i)) > $13 = #f > but : > scheme@(guile-user)> (zero? (imag-part (* +i +i))) > $14 = #t > > thxs I believe guile only considers numbers with an _exact_ 0 imaginary part to be real. However, since all guile complex numbers are inexact, this means that (* +i +i) is not considered real. scheme@(guile−user)> (* +i +i) $19 = −1.0+0.0i scheme@(guile−user)> (exact? (imag-part $19)) $20 = #f While I don't know if this was a specific concern when writing, this is in line with the interpretation in section 11.7.4 Numerical operations of the r6rs document. http://www.r6rs.org/final/html/r6rs/r6rs-Z-H-14.html#node_sec_11.7.4.1 If x is a real number object, then (rational? x) is true if and only if there exist exact integer objects k1 and k2 such that (= x (/ k1 k2)) and (= (numerator x) k1) and (= (denominator x) k2) are all true. Thus infinities and NaNs are not rational number objects. (real? -2.5+0.0i) ⇒ #f (real? -2.5+0i)⇒ #t -- Ian Price "Programming is like pinball. The reward for doing it well is the opportunity to do it again" - from "The Wizardy Compiled"
Re: (real? (* +i +i)) -> #f
Ian Price wrote: > > I believe guile only considers numbers with an _exact_ 0 imaginary part > to be real. However, since all guile complex numbers are inexact, this > means that (* +i +i) is not considered real. > > scheme@(guile−user)> (* +i +i) > $19 = −1.0+0.0i > scheme@(guile−user)> (exact? (imag-part $19)) > $20 = #f > > While I don't know if this was a specific concern when writing, this is > in line with the interpretation in section 11.7.4 Numerical operations > of the r6rs document. > > http://www.r6rs.org/final/html/r6rs/r6rs-Z-H-14.html#node_sec_11.7.4.1 > > If x is a real number object, then (rational? x) is true if and only if > there exist exact integer objects k1 and k2 such that (= x (/ k1 k2)) > and (= (numerator x) k1) and (= (denominator x) k2) are all true. Thus > infinities and NaNs are not rational number objects. > > (real? -2.5+0.0i) ⇒ #f > (real? -2.5+0i)⇒ #t > > -- > Ian Price > Thx Ian, the concept of exactness is new for me : scheme@(guile-user)> (real? +0i) $1 = #t scheme@(guile-user)> (inexact->exact 1.0) $2 = 1 scheme@(guile-user)> (inexact->exact (* +i +i)) $3 = -1 scheme@(guile-user)> (* +i +i) $4 = -1.0+0.0i scheme@(guile-user)> (real? (* +i +i)) $5 = #f scheme@(guile-user)> (real? (inexact->exact (* +i +i))) $6 = #t -- View this message in context: http://old.nabble.com/%28real--%28*-%2Bi-%2Bi%29%29--%3E--f-tp34250234p34250430.html Sent from the Gnu - Guile - User mailing list archive at Nabble.com.