diff --git a/preprocessor/DataTree.hh b/preprocessor/DataTree.hh
index 17823d23f0c313ac84cfd307ef992338f4dbff55..3540a86de253304ae272599e575d9d50c0ff66ee 100644
--- a/preprocessor/DataTree.hh
+++ b/preprocessor/DataTree.hh
@@ -1,5 +1,5 @@
 /*
- * Copyright (C) 2003-2011 Dynare Team
+ * Copyright (C) 2003-2012 Dynare Team
  *
  * This file is part of Dynare.
  *
@@ -27,6 +27,7 @@ using namespace std;
 #include <list>
 #include <sstream>
 #include <iomanip>
+#include <cmath>
 
 #include "SymbolTable.hh"
 #include "NumericalConstants.hh"
@@ -261,6 +262,13 @@ public:
 inline expr_t
 DataTree::AddPossiblyNegativeConstant(double v)
 {
+  /* Treat NaN and Inf separately. In particular, under Windows, converting
+     them to a string does not work as expected */
+  if (isnan(v))
+    return NaN;
+  if (isinf(v))
+    return (v < 0 ? MinusInfinity : Infinity);
+
   bool neg = false;
   if (v < 0)
     {