Welcome! Please see the About page for a little more info on how this works.

0 votes
ago in ClojureCLR by

I encountered this possible bug while running a property-based test suite in a ClojureCLR project. Given a comparison between NaN in an if expression, it seemingly takes the wrong branch.

Clojure (CLR)

λ cljr
Clojure core loaded in 837 milliseconds.
Starting main
Clojure core loaded in 409 milliseconds.
Clojure 1.12.2
user=> (<= ##NaN ##NaN)
false
user=> (if (<= ##NaN ##NaN) true false)
true
user=> (let [t (<= ##NaN ##NaN)] (if t true false))
false

user=> (>= ##NaN ##NaN)
false
user=> (if (>= ##NaN ##NaN) true false)
true
user=> (let [t (>= ##NaN ##NaN)] (if t true false))
false

I wasn't able to replicate the issue on Clojure (JVM), C#, or F#.

Clojure (JVM)

λ clj
Clojure 1.12.0
user=> (<= ##NaN ##NaN)
false
user=> (if (<= ##NaN ##NaN) true false)
false
user=> (let [t (<= ##NaN ##NaN)] (if t true false))
false

C#

using System;
					
public class Program
{
	public static void Main()
	{
		Console.WriteLine(Double.NaN <= Double.NaN);
		if (Double.NaN <= Double.NaN) {
			Console.WriteLine(true);
		} else {
			Console.WriteLine(false);
		}
		var t = Double.NaN <= Double.NaN;
		if (t) {
			Console.WriteLine(true);
		} else {
			Console.WriteLine(false);
		}
	}
}

False
False
False

F#

λ dotnet fsi

> nan <= nan;;                                                                
val it: bool = false

> if (nan <= nan) then true else false;;                          
val it: bool = false

> let t = nan <= nan;;
val t: bool = false

> if t then true else false;;
val it: bool = false

Please log in or register to answer this question.

...