digitalmars.D.bugs - Floating point discrepancy in (File.)printf?
- Marco Falda (28/28) Apr 19 2005 Thank you for your feedback on my previous notification.
- Ben Hinkle (2/4) Apr 19 2005 looks like %f means "float" in printf and "double" in _vsnprintf, which ...
- Marco Falda (3/7) Apr 21 2005 In fact I resolved the problem by replacing float with double (I do not ...
Thank you for your feedback on my previous notification. I post here an example of code that in my opinion should generate the same output on the screen and on the file stream (in this case I was able to reduce the context :-) ). With my version of dmd, the last that I found on the site (O.S. WinXP Home SP 2), the file "test.txt" is filled with a pattern such as "n. .. = 0.000". It is also possible that I am confusing the modules "stream" and "file", but in that case I do not understand why the compiler tells me nothing and why the text is correctly written to the file. A final observation: if you append some text at the end of "test.txt" and re-run the executable the new text just added will not be cleared; I think that this is a designed behaviour, but I am not able to find an explanation in the documentation. Thank you in advance for any clue. import std.stream; int main(char[][] args) { int i; float n; File f = new File("test.txt", FileMode.Out); for (i = 0; i < 10; i++) { n = 0.333 * i; printf("n. %d = %1.3f\n", i + 1, n); f.printf("n. %d = %1.3f\n", i + 1, n); } f.close(); return 0; }
Apr 19 2005
printf("n. %d = %1.3f\n", i + 1, n); f.printf("n. %d = %1.3f\n", i + 1, n);looks like %f means "float" in printf and "double" in _vsnprintf, which is what file.printf calls (and it's also what std.outbuffer.OutBuffer uses).
Apr 19 2005
In article <d434qq$qv7$1 digitaldaemon.com>, Ben Hinkle says...In fact I resolved the problem by replacing float with double (I do not know if it is also possible to change the conversion-type).printf("n. %d = %1.3f\n", i + 1, n); f.printf("n. %d = %1.3f\n", i + 1, n);looks like %f means "float" in printf and "double" in _vsnprintf, which is what file.printf calls (and it's also what std.outbuffer.OutBuffer uses).
Apr 21 2005