Index: lib/AST/StmtPrinter.cpp
===================================================================
--- lib/AST/StmtPrinter.cpp	(revision 139231)
+++ lib/AST/StmtPrinter.cpp	(working copy)
@@ -668,8 +673,11 @@
   }
 }
 void StmtPrinter::VisitFloatingLiteral(FloatingLiteral *Node) {
-  // FIXME: print value more precisely.
-  OS << Node->getValueAsApproximateDouble();
+  SmallVector<char, 16> Str;
+  llvm::APFloat Val(Node->getValue());
+  unsigned prec = llvm::APFloat::semanticsPrecision(Val.getSemantics());
+  Val.toString(Str, prec);
+  OS << StringRef(Str.data(), Str.size());
 }
 
 void StmtPrinter::VisitImaginaryLiteral(ImaginaryLiteral *Node) {
