upvote
The 8087 came out when the premier numerics processors worldwide were the various Cray/CRI products, and if you know this much about the 8087's extended register format then it's likely you already know about Seymour's opinion expressed in silicon about the handling of the LSBs. As a freshly minted computational mathematician I was worried about the Cray systems accuracy on long running computations but after 5 years right on the front lines of the 1-4 highest throughput systems worldwide, with, ISTR, zero practical effect on any computation that ever mattered. Huh turns out Seymour was smarter than me. Should've picked up a shovel.

As far as delivered accuracy of the 8087, performing the operations at 80 bits, rather than 64 it was better than non-extended formats. Anyway you can read all about it here:

https://en.wikipedia.org/wiki/Extended_precision#x86_extende...

Kahan endorsed is all I needed to know.

I can't remember the details from back then but the initial Sun java implementation did something weird with this.

reply
Sun wanted the jvm to "replicate exactly" between machines so they chopped off the precision of all intermediate operations to 64 or 32 (double/single) which infuriated kahan
reply
Aha! TY. Sun's floating point people were world class but I still think this was a dumb thing to do.

With the NAS Parallel Benchmarks we were trying to encourage as wide a diversity of hardware and algorithms as possible so we were lenient with the acceptable "valid" interval of "correct" behavior. I've already discussed heretical Cray FP. Those were fantastic systems. No way would we disqualify some weird/different algorithm/architecture if it meaningfully advanced the SOA in performance/efficiency. OTOH wars were fought over having any firm accuracy requirements at all. So this jvm thing looked... pointless at best?

This is all nostalgia for a past that actually was. Those were the days my friends.

reply
> this is compounded by many compilers' decision to spill floating-point registers incorrectly (they're spilled as 32-bit or 64-bit, not 80-bit)

My compilers behaved properly.

reply