Groups | Search | Server Info | Keyboard shortcuts | Login | Register [http] [https] [nntp] [nntps]
| From | Keith Thompson <kst-u@mib.org> |
|---|---|
| Newsgroups | comp.lang.c |
| Subject | Re: Floating point to string, and back via `%a'... |
| Date | 2015-07-22 17:08 -0700 |
| Organization | None to speak of |
| Message-ID | <lnvbdbzqff.fsf@kst-u.example.com> (permalink) |
| References | <moorva$su7$1@speranza.aioe.org> <87mvyn51bm.fsf@bsb.me.uk> <mop2i6$bkq$1@speranza.aioe.org> <lnfv4f26t4.fsf@kst-u.example.com> |
Keith Thompson <kst-u@mib.org> writes:
> "Chris M. Thomasson" <nospam@nospam.nospam> writes:
> [...]
>>> It looks like MSVC simply has a bug. You could calculate the number of
>>> digits you need but that would be fiddly to get right in every single
>>> case.
>>
>> Right. FWIW, %a does not work on MSVC for sscanf always returns zero.
>
> Does MSVC just not implement %a? Did you try changing to %la (you may
> have already answered that).
>
> Try this test program:
>
> #include <stdio.h>
> int main(void) {
> char buf[256];
> double in = 1.0123456789;
> double out = 1.0123456789;
> int result;
>
> sprintf(buf, "%a", in);
> result = sscanf(buf, "%la", &out);
>
> printf("in = %.10f = %a\n", in, in);
> printf("buf = \"%s\"\n", buf);
> printf("sscanf returned %d\n", result);
> printf("out = %.10f = %a\n", out, out);
>
> if (in == out) {
> puts("in == out");
> }
> else {
> puts("in != out");
> }
> return 0;
> }
Here's a better version. It doesn't examine the value of `out` unless
sscanf succeeds.
#include <stdio.h>
#include <float.h>
int main(void) {
char buf[256];
double in = 1.0123456789;
double out = FLT_MAX; /* arbitrary value */
int result;
sprintf(buf, "%a", in);
result = sscanf(buf, "%la", &out);
printf("in = %.50f = %a\n", in, in);
printf("buf = \"%s\"\n", buf);
printf("sscanf returned %d\n", result);
if (result == 1) {
printf("out = %.50f = %a\n", out, out);
if (in == out) {
puts("in == out");
}
else {
puts("in != out");
}
}
return 0;
}
> On my system, the output is:
>
> in = 1.0123456789 = 0x1.0329161f1f56cp+0
> buf = "0x1.0329161f1f56cp+0"
> sscanf returned 1
> out = 1.0123456789 = 0x1.0329161f1f56cp+0
> in == out
>
> What output do you get using MSVC? If it's significantly different,
> there may well be a bug in MSVC (presumably in its runtime library).
--
Keith Thompson (The_Other_Keith) kst-u@mib.org <http://www.ghoti.net/~kst>
Working, but not speaking, for JetHead Development, Inc.
"We must do something. This is something. Therefore, we must do this."
-- Antony Jay and Jonathan Lynn, "Yes Minister"
Back to comp.lang.c | Previous | Next — Previous in thread | Next in thread | Find similar | Unroll thread
Floating point to string, and back via `%a'... "Chris M. Thomasson" <nospam@nospam.nospam> - 2015-07-22 12:46 -0700
Re: Floating point to string, and back via `%a'... James Kuyper <jameskuyper@verizon.net> - 2015-07-22 16:19 -0400
Re: Floating point to string, and back via `%a'... "Chris M. Thomasson" <nospam@nospam.nospam> - 2015-07-22 13:49 -0700
Re: Floating point to string, and back via `%a'... Keith Thompson <kst-u@mib.org> - 2015-07-22 14:01 -0700
Re: Floating point to string, and back via `%a'... James Kuyper <jameskuyper@verizon.net> - 2015-07-22 17:18 -0400
Re: Floating point to string, and back via `%a'... "Chris M. Thomasson" <nospam@nospam.nospam> - 2015-07-22 14:22 -0700
Re: Floating point to string, and back via `%a'... Keith Thompson <kst-u@mib.org> - 2015-07-22 13:40 -0700
Re: Floating point to string, and back via `%a'... "Chris M. Thomasson" <nospam@nospam.nospam> - 2015-07-22 14:01 -0700
Re: Floating point to string, and back via `%a'... Keith Thompson <kst-u@mib.org> - 2015-07-22 14:12 -0700
Re: Floating point to string, and back via `%a'... "Chris M. Thomasson" <nospam@nospam.nospam> - 2015-07-22 14:20 -0700
Re: Floating point to string, and back via `%a'... "Chris M. Thomasson" <nospam@nospam.nospam> - 2015-07-22 14:24 -0700
Re: Floating point to string, and back via `%a'... glen herrmannsfeldt <gah@ugcs.caltech.edu> - 2015-07-22 21:30 +0000
Re: Floating point to string, and back via `%a'... "Chris M. Thomasson" <nospam@nospam.nospam> - 2015-07-22 14:39 -0700
Re: Floating point to string, and back via `%a'... Joe Pfeiffer <pfeiffer@cs.nmsu.edu> - 2015-07-22 19:49 -0600
Re: Floating point to string, and back via `%a'... Ben Bacarisse <ben.usenet@bsb.me.uk> - 2015-07-22 22:28 +0100
Re: Floating point to string, and back via `%a'... "Chris M. Thomasson" <nospam@nospam.nospam> - 2015-07-22 14:34 -0700
Re: Floating point to string, and back via `%a'... Keith Thompson <kst-u@mib.org> - 2015-07-22 14:58 -0700
Re: Floating point to string, and back via `%a'... "Chris M. Thomasson" <nospam@nospam.nospam> - 2015-07-22 15:43 -0700
Re: Floating point to string, and back via `%a'... "Chris M. Thomasson" <nospam@nospam.nospam> - 2015-07-22 15:45 -0700
Re: Floating point to string, and back via `%a'... "Chris M. Thomasson" <nospam@nospam.nospam> - 2015-07-22 15:51 -0700
Re: Floating point to string, and back via `%a'... Robert Wessel <robertwessel2@yahoo.com> - 2015-07-22 18:21 -0500
Re: Floating point to string, and back via `%a'... Keith Thompson <kst-u@mib.org> - 2015-07-22 16:58 -0700
Re: Floating point to string, and back via `%a'... Keith Thompson <kst-u@mib.org> - 2015-07-22 16:52 -0700
Re: Floating point to string, and back via `%a'... Keith Thompson <kst-u@mib.org> - 2015-07-22 17:08 -0700
Re: Floating point to string, and back via `%a'... Ben Bacarisse <ben.usenet@bsb.me.uk> - 2015-07-23 00:01 +0100
Re: Floating point to string, and back via `%a'... "Chris M. Thomasson" <nospam@nospam.nospam> - 2015-07-22 19:40 -0700
Re: Floating point to string, and back via `%a'... Keith Thompson <kst-u@mib.org> - 2015-07-22 22:32 -0700
Re: Floating point to string, and back via `%a'... Ben Bacarisse <ben.usenet@bsb.me.uk> - 2015-07-23 11:07 +0100
Re: Floating point to string, and back via `%a'... Ben Bacarisse <ben.usenet@bsb.me.uk> - 2015-07-23 11:25 +0100
Re: Floating point to string, and back via `%a'... "Chris M. Thomasson" <nospam@nospam.nospam> - 2015-07-24 11:44 -0700
Re: Floating point to string, and back via `%a'... "Chris M. Thomasson" <nospam@nospam.nospam> - 2015-07-24 11:47 -0700
csiph-web