Groups | Search | Server Info | Keyboard shortcuts | Login | Register [http] [https] [nntp] [nntps]


Groups > comp.lang.c > #112069

Re: Hexadecimal float constants

From Keith Thompson <kst-u@mib.org>
Newsgroups comp.lang.c
Subject Re: Hexadecimal float constants
Date 2017-06-12 11:26 -0700
Organization None to speak of
Message-ID <lna85dgj0b.fsf@kst-u.example.com> (permalink)
References <ohmfqn$q4l$1@gioia.aioe.org> <3ebbcdb0-2c89-8e08-43a3-c54fe22fe426@verizon.net> <b71d7769-536a-487d-a141-b7b1214362df@googlegroups.com>

Show all headers | View raw


supercat@casperkitty.com writes:
> On Monday, June 12, 2017 at 11:44:08 AM UTC-5, James R. Kuyper wrote:
>> The C89 Committee felt that it was better to tolerate such 
>> anomalies than burden the preprocessor with a more exact, and exacting, 
>> lexical specification. It felt that this anomaly was no worse than the 
>> principle under which the characters a+++++b are tokenized as a ++ ++ + 
>> b (an invalid expression), even though the tokenization a ++ + ++ b 
>> would yield a syntactically correct expression. In both cases, exercise 
>> of reasonable precaution in coding style avoids surprises."
>
> Inserting token boundaries in a sequence of plus signs so as to handle
> a+++++b with the greediest clustering of plus signs that will parse would
> require that the tokenizer know whether "a" is an array or a number, which
> would not be possible if processing stages are handled sequentially.

How so?  I can't think of any other tokenization than a ++ + ++ b that
would yield a syntactically valid expression, regardless of how `a` is
declared/defined.  (Of course the standard requires it to be tokenized
as a ++ ++ + b, which is a syntax error, again regardless of how `a` and
`b` are delcared/defined.)

> By contrast, it is unlikely that any non-contrived strictly conforming
> programs would rely upon compilers' inability to recognize a token
> boundary between a hex constant ending in "E" and a trailing plus sign,
> or--for that matter--upon a compiler's regarding 1.23E+5 as three tokens,
> the first of which is "1.23E" and must be followed by a plus sign and an
> integer literal, and allowing the use of ## to join such a "number needing
> exponent" token to a + sign.

1.23E+5 is a perfectly valid floating constant.  The example we were
discussing was 0x1234e-1 .

> Fun puzzle: produce a strictly-conforming program which would return 1 on
> an implementation that conforms to the standard, and 0 on an implementation
> that would regard a + or - sign that follows any hex constant as a token
> boundary, even if the last digit of the constant happens to be "e" or "E".
> It is possible, but I would think it unlikely that any such programs have
> ever been written except for compiler testing or other contrived purposes.

I don't know whether there is such a program -- but so what?
Processing strictly conforming programs is not the only requirement
the standard places on an implementation.  Implementations are also
required to diagnose violations of syntax rules and constraints,
and 1.23E+5 is a constraint violation (6.4p2).

(Incidentally, a strictly conforming program cannot return 1, only 0,
EXIT_SUCCESS, or EXIT_FAILURE.)

-- 
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


Thread

Hexadecimal float constants Steve Keller <keller@no.invalid> - 2017-06-12 18:34 +0200
  Re: Hexadecimal float constants "James R. Kuyper" <jameskuyper@verizon.net> - 2017-06-12 12:44 -0400
    Re: Hexadecimal float constants supercat@casperkitty.com - 2017-06-12 10:54 -0700
      Re: Hexadecimal float constants Keith Thompson <kst-u@mib.org> - 2017-06-12 11:26 -0700
        Re: Hexadecimal float constants bartc <bc@freeuk.com> - 2017-06-12 19:38 +0100
          Re: Hexadecimal float constants scott@slp53.sl.home (Scott Lurndal) - 2017-06-12 18:45 +0000
          Re: Hexadecimal float constants Robert Wessel <robertwessel2@yahoo.com> - 2017-06-12 13:54 -0500
            Re: Hexadecimal float constants bartc <bc@freeuk.com> - 2017-06-12 20:40 +0100
              Re: Hexadecimal float constants Keith Thompson <kst-u@mib.org> - 2017-06-12 13:06 -0700
        Re: Hexadecimal float constants supercat@casperkitty.com - 2017-06-12 13:37 -0700
          Re: Hexadecimal float constants bartc <bc@freeuk.com> - 2017-06-12 22:22 +0100
          Re: Hexadecimal float constants Keith Thompson <kst-u@mib.org> - 2017-06-12 16:01 -0700
            Re: Hexadecimal float constants supercat@casperkitty.com - 2017-06-12 16:36 -0700
      Re: Hexadecimal float constants jameskuyper@verizon.net - 2017-06-12 12:39 -0700
  Re: Hexadecimal float constants bartc <bc@freeuk.com> - 2017-06-12 18:42 +0100
  Re: Hexadecimal float constants Thomas David Rivers <rivers@dignus.com> - 2017-06-12 17:27 -0400
    Re: Hexadecimal float constants "James R. Kuyper" <jameskuyper@verizon.net> - 2017-06-12 18:03 -0400
      Re: Hexadecimal float constants bartc <bc@freeuk.com> - 2017-06-12 23:31 +0100
        Re: Hexadecimal float constants Ben Bacarisse <ben.usenet@bsb.me.uk> - 2017-06-13 00:10 +0100
          Re: Hexadecimal float constants jacobnavia <jacob@jacob.remcomp.fr> - 2017-06-13 01:33 +0200
            Re: Hexadecimal float constants Ben Bacarisse <ben.usenet@bsb.me.uk> - 2017-06-13 01:10 +0100
      Re: Hexadecimal float constants supercat@casperkitty.com - 2017-06-12 16:01 -0700
        Re: Hexadecimal float constants Keith Thompson <kst-u@mib.org> - 2017-06-12 17:00 -0700
          Re: Hexadecimal float constants supercat@casperkitty.com - 2017-06-13 07:51 -0700
            Re: Hexadecimal float constants Keith Thompson <kst-u@mib.org> - 2017-06-13 09:17 -0700
              Re: Hexadecimal float constants bartc <bc@freeuk.com> - 2017-06-13 17:45 +0100
                Re: Hexadecimal float constants Keith Thompson <kst-u@mib.org> - 2017-06-13 11:58 -0700
                Re: Hexadecimal float constants supercat@casperkitty.com - 2017-06-13 12:57 -0700
                Re: Hexadecimal float constants Keith Thompson <kst-u@mib.org> - 2017-06-13 13:01 -0700
                Re: Hexadecimal float constants bartc <bc@freeuk.com> - 2017-06-13 22:11 +0100
                Re: Hexadecimal float constants Keith Thompson <kst-u@mib.org> - 2017-06-13 14:22 -0700
                Re: Hexadecimal float constants "James R. Kuyper" <jameskuyper@verizon.net> - 2017-06-13 17:43 -0400
                Re: Hexadecimal float constants Keith Thompson <kst-u@mib.org> - 2017-06-13 14:48 -0700
                Re: Hexadecimal float constants bartc <bc@freeuk.com> - 2017-06-13 23:03 +0100
                Re: Hexadecimal float constants GOTHIER Nathan <nathan.gothier@gmail.com> - 2017-06-14 01:30 +0200
              Re: Hexadecimal float constants supercat@casperkitty.com - 2017-06-13 12:24 -0700
                Re: Hexadecimal float constants jacobnavia <jacob@jacob.remcomp.fr> - 2017-06-13 21:52 +0200
                Re: Hexadecimal float constants Keith Thompson <kst-u@mib.org> - 2017-06-13 13:12 -0700
                Re: Hexadecimal float constants supercat@casperkitty.com - 2017-06-13 16:18 -0700
                Re: Hexadecimal float constants Ike Naar <ike@iceland.freeshell.org> - 2017-06-14 21:28 +0000
    Re: Hexadecimal float constants supercat@casperkitty.com - 2017-06-12 15:21 -0700
    Re: Hexadecimal float constants Thomas David Rivers <rivers@dignus.com> - 2017-06-13 12:13 -0400

csiph-web