Thread overview | |||||
---|---|---|---|---|---|
|
January 12, 2018 Floating Point Literals: float (f) and real (L) suffix issue | ||||
---|---|---|---|---|
| ||||
suffix.d ``` void main () { real r = 1.L; float f = 1.f; } ``` $ dmd suffix.d suffix.d(3): Error: no property 'L' for type 'int' suffix.d(4): Error: no property 'f' for type 'int' According to the grammar in dmd2/html/d/spec/lex.html both are valid FloatLiterals. Any comments? |
January 12, 2018 Re: Floating Point Literals: float (f) and real (L) suffix issue | ||||
---|---|---|---|---|
| ||||
Posted in reply to kdevel | On Friday, 12 January 2018 at 12:45:59 UTC, kdevel wrote:
> suffix.d
> ```
> void main ()
> {
> real r = 1.L;
> float f = 1.f;
> }
> ```
>
> $ dmd suffix.d
> suffix.d(3): Error: no property 'L' for type 'int'
> suffix.d(4): Error: no property 'f' for type 'int'
>
> According to the grammar in dmd2/html/d/spec/lex.html both are valid FloatLiterals. Any comments?
Just found this on the same page
| If a floating literal has a . and a type suffix, at least one digit must be in-between:
|
| 1f; // OK
| 1.f; // forbidden
| 1.; // OK, double
Is there a rational for this restriction?
|
January 12, 2018 Re: Floating Point Literals: float (f) and real (L) suffix issue | ||||
---|---|---|---|---|
| ||||
Posted in reply to kdevel | On Friday, 12 January 2018 at 12:57:37 UTC, kdevel wrote:
> On Friday, 12 January 2018 at 12:45:59 UTC, kdevel wrote:
>> suffix.d
>> ```
>> void main ()
>> {
>> real r = 1.L;
>> float f = 1.f;
>> }
>> ```
>>
>> $ dmd suffix.d
>> suffix.d(3): Error: no property 'L' for type 'int'
>> suffix.d(4): Error: no property 'f' for type 'int'
>>
>> According to the grammar in dmd2/html/d/spec/lex.html both are valid FloatLiterals. Any comments?
>
> Just found this on the same page
>
> | If a floating literal has a . and a type suffix, at least one digit must be in-between:
> |
> | 1f; // OK
> | 1.f; // forbidden
> | 1.; // OK, double
>
> Is there a rational for this restriction?
int foo(int n) { return n * 2; }
assert(2.foo == 4);
Now simply replace foo with f or L. I believe this ambiguity is the whole reason.
--
Simen
|
Copyright © 1999-2021 by the D Language Foundation