On Saturday, 21 May 2016 at 21:56:02 UTC, Walter Bright wrote:
On 5/21/2016 11:36 AM, Tobias M wrote:
Sorry but this is a misrepresentation. I never claimed that the x87 doesn't
conform to the IEEE standard.

My point was directed to more than just you. Sorry I didn't make that clear.


The point is, that is IS possible to provide fairly reasonable and consistent
semantics within the existing standards (C, C++, IEEE, ...).

That implies what I propose, which is what many C/C++ compilers do, is unreasonable, inconsistent, not Standard compliant, and not IEEE. I.e. that the x87 is not conformant :-)

I'm trying to understand what you want to say here, but I just don't get it. Can you maybe formulate it differently?

Read the documentation on the FP switches for VC++, g++, clang, etc. You'll see there are tradeoffs. There is no "obvious, sane" way to do it.

There just isn't.

As I see it, the only real trade off is speed/optimization vs correctness.

They provide a
certain degree of freedom to accomodate for different hardware, but this doesn't mean that software should use this freedom to do arbitrary things.

Nobody is suggesting doing arbitrary things, but to write portable fp, take into account what the Standard says rather than what your version of the compiler does with various default and semi-documented switches.

https://gcc.gnu.org/wiki/FloatingPointMath

Seems relatively straight forward to me and well documented to me... Dangerous optimizations like reordering expressions are all opt-in.

Sure it's probably not 100% consistent across implementations/platforms, but it's also *that* bad. And it's certainly not an excuse to make it even worse.

And yes, I think that in such an underspecified domain like FP, you cannot just rely on the standard but have to take the individual implementations into account.
Again, this is not ideal, but let's not make it even worse.

Regarding the decades of FP design, the initial edition of K&R C contained the
following clause:
"Notice that all floats in an expression are converted to double; all floating
point arithmethic in C is done in double precision".
That passus was removed quite quickly because users complained about it.

It was changed to allow floats to be computed as floats, not require it. And the reason at the time, as I recall, was to get faster floating point ops, not because anyone desired reduced precision.

I don't think that anyone has argued that lower precision is better. But a compiler should just do what it is told, not trying to be too clever.

Reply via email to