iota to array

Steven Schveighoffer schveiguy at yahoo.com
Tue Feb 27 14:05:24 UTC 2018


On 2/26/18 6:34 PM, psychoticRabbit wrote:
> On Sunday, 25 February 2018 at 14:52:19 UTC, Steven Schveighoffer wrote:
>>
>> 1 == 1.0, no?
> 
> no. at least, not when a language forces you to think in terms of types.

But you aren't. You are thinking in terms of text representation of 
values (which is what a literal is). This works just fine:

double x = 1;
double y = 1.0;
assert(x == y);

The same generated code to store 1 into x is used to store 1.0 into y. 
There is no difference to the compiler, it's just different in the 
source code.

> I admit, I've never printed output without using format specifiers, but 
> still, if I say write(1.0), it should not go off and print what looks to 
> me, like an int.

If it didn't, I'm sure others would complain about it :)

> Inheriting crap from C is no excuse ;-)
> 
> and what's going on here btw?
> 
> assert( 1 == 1.000000000000000001 );  // assertion error in DMD but not 
> in LDC
> assert( 1 == 1.0000000000000000001 );  // no assertion error??

Floating point is not exact. In fact, even the one that asserts, cannot 
be accurately represented internally. At some decimal place, it cannot 
store any more significant digits, so it just approximates.

You may want to just get used to this, it's the way floating point has

-Steve


More information about the Digitalmars-d-learn mailing list