On 10/24/2017 12:28 PM, Fool wrote:
On Tuesday, 24 October 2017 at 14:28:20 UTC, Basile B. wrote:
    float f0 = cos(2 * PI /  1.123548789545545646452154L);
    float f1 = cos(cast(float)(2 * PI / 1.123548789545545646452154L));

[...]

but paradoxically the first is more accurate.

There is no paradox. That's comparing apples with oranges. No offense.

@all: It is sad to see how parts of the community are losing their distance to the project and even put a gloss on completely absurd design decisions.

For the record, I remember the points made:

* When converting across integral types, any failed coercion yields a value essentially unrelated to the source. So we deemed these unacceptable.

* When converting int to float or long to double, there is a loss of accuracy - a float can represent all ints, but some of them will be represented with approximation. But here there _is_ a notion of "I'm okay with an approximation". So we deemed these acceptable.

* When converting double to float, again there is a loss of accuracy and also the risk of too large values. But there's never a gross mistake - too large values are converted to infinity, and otherwise an approximation occurs. This was also deemed acceptable.

Folks with other design sensibilities might choose differently. Actually I wasn't on board with this decision, but I accepted it. But deeming it absurd is a bit of a stretch.


Andrei

Reply via email to