On 12/30/10 2:13 PM, Don wrote:
bearophile wrote:
Don:
No. People expect sqrt(2) to compile, and to return 1.414....
Then people probably need to use sqrt(2.0) or sqrt(cast(double)2).
I've got a lot of sympathy for the first alternative (absolutely NONE
for the second!). But unfortunately, the language allows sqrt(2) to
compile if there is only a single sqrt function.
We have here a feature which works in some cases, but not in others.
I agree there's an issue here, but not only with floating point numbers:
void fun(long);
void fun(ulong);
...
fun(2); // whaa?
The same problem is at work here: 2 is an int and is equally inclined to
go to either long or ulong.
Generally I find it a bit difficult to integrate this proposal within
the conversions framework that we have; it adds an entire new concept
into the mix. This makes me be more conservative. For literals, all
things considered, I don't think requiring the .0 is a major hindrance.
For non-literals that's more of an issue:
int x = 42;
sqrt(x); // whaa?
I'm not sure to what extent this is a problem; I defer that opinion to
Don. If this is indeed an important issue, we should address it. If not,
I think improving the situation for literals exclusively would provide
only marginal benefit.
Andrei