d55a1121490334851b7eb7ba184e01b361a8ab75 — Leo Butler 3 months ago 2c77551
lisp/ob-C.el: replace %f with %s to prevent unneeded rounding

* lisp/ob-C.el (org-babel-C-val-to-C-type): Floats should be printed
as string literals to prevent rounding introduced by %f format.

* testing/lisp/test-ob-C.el (ob-C/float-var): Test that floats are not
rounded when passed as an org :var.
2 files changed, 12 insertions(+), 1 deletions(-)

M lisp/ob-C.el
M testing/lisp/test-ob-C.el
M lisp/ob-C.el => lisp/ob-C.el +1 -1
@@ 339,7 339,7 @@ FORMAT can be either a format string or a function which is called with VAL."
	  (pcase basetype
	    (`integerp '("int" "%d"))
	    (`floatp '("double" "%f"))
	    (`floatp '("double" "%s")) ;; %f rounds, use %s to print the float literally
	      (if (eq org-babel-c-variant 'd) "string" "const char*")

M testing/lisp/test-ob-C.el => testing/lisp/test-ob-C.el +11 -0
@@ 95,6 95,17 @@
		      (org-babel-next-src-block 10)
		      (should (= 42 (org-babel-execute-src-block))))))

(ert-deftest ob-C/float-var ()
  "Test that floats are passed without unnecessary rounding."
  (if (executable-find org-babel-C++-compiler)
"#+source: float_var
#+begin_src cpp :var x=1.123456789012345678 :includes \"<iostream>\" :results silent
double y = 1.123456789012345678;
std::cout << (x == y);
(should (= 1 (org-babel-execute-src-block))))))

(ert-deftest ob-C/table ()
  "Test of a table output"
  (if (executable-find org-babel-C++-compiler)