Here's a more refined test:
heine:~/Desktop> cat nan-test.scm (declare (standard-bindings) (extended-bindings) (block) (not safe) (not constant-fold))
(define infinity (fl/ 1.0 0.0)) (define nan1 (fl- infinity infinity)) (define nan2 (fl/ 0. 0.)) (pp (list (##flonum.->inexact-exponential-format nan1) (##flonum.->inexact-exponential-format nan2))) (pp (list (##subtyped? nan1) (##subtyped? nan2) (fx= (##subtype nan1) (##subtype nan2)) (let () (declare (not inline-primitives)) (eqv? nan1 nan2)))) (pp (eqv? nan1 nan2)) heine:~/Desktop> gsc -expansion nan-test Expansion:
(define infinity ('#<procedure #2 ##fl/> 1. 0.))
(define nan1 ('#<procedure #3 ##fl-> infinity infinity))
(define nan2 ('#<procedure #2 ##fl/> 0. 0.))
(pp ('#<procedure #4 ##list> (##flonum.->inexact-exponential-format nan1) (##flonum.->inexact-exponential-format nan2)))
(pp ('#<procedure #4 ##list> ('#<procedure #5 ##subtyped?> nan1) ('#<procedure #5 ##subtyped?> nan2) ('#<procedure #6 ##fx=> ('#<procedure #7 ##subtype> nan1) ('#<procedure #7 ##subtype> nan2)) ('#<procedure #8 eqv?> nan1 nan2)))
(pp (or ('#<procedure #9 ##eq?> nan1 nan2) (and ('#<procedure #5 ##subtyped?> nan1) (and ('#<procedure #5 ##subtyped?> nan2) (and ('#<procedure #6 ##fx=> ('#<procedure #7 ##subtype> nan1) ('#<procedure #7 ##subtype> nan2)) ('#<procedure #8 eqv?> nan1 nan2)))))) heine:~/Desktop> gsi nan-test (#(+nan.0 1023 -1) #(+nan.0 1023 1)) (#t #t #t #f) #f heine:~/Desktop> gsi nan-test.scm (#(+nan.0 1023 -1) #(+nan.0 1023 -1)) (#t #t #t #t) #t
I have no idea what's going on.
Brad
heine:~/Desktop> uname -a Linux heine 3.0.0-13-generic #22-Ubuntu SMP Wed Nov 2 13:27:26 UTC 2011 x86_64 x86_64 x86_64 GNU/Linux heine:~/Desktop> gsi -v v4.6.2 20110519175028 x86_64-unknown-linux-gnu "./configure /usr/local/Gambit-C/share/config.site /usr/local/Gambit-C/etc/config.site"