The representation of floating point numbers and the “accuracy”, repeatability and reversibility of arithmetic operations has long be a topic of discussion amongst Cray customer and scientific users. The Cray machines up to the C90 range used 64 bit Cray floating point arithmetic. When representing the long smooth curve of real numbers using digital bits there is always a conflict between precision (the smallest change of number that can be represented) and the range (distance between largest and smallest numbers). There is extensive literature on the design and implementation of number systems on digital computers but before the the IEEE Standard for Floating-Point Arithmetic (IEEE 754) was established in 1985 as a technical standard for floating-point computation, computer vendors used their own arrangements. The Cray-1 used 64 bits for floating point and integer number that allowed both for a very wide range of numbers to be represented at high precision. However the arithmetic units that implemented Cray floating point did have some accuracy/repeatability issues at the edges of precision. The use of Cray floating point representation was one of the issues that programmers had to be aware of when porting codes and systems to the Cray machines. The Cray T3D/E used Dec Alpha processors which supported IEEE arithmetic. The T90 had a choice of CPUs that implemented Cray floating point or IEEE number systems.
Sites that require the ultimate precision and repeatability of operation in floating point numbers were the simulation sites. Weather forecasting, astronomical simulation and computational fluid dynamic all require stable and predictable numbers systems right to the edges. Without ultimate precision and reversibility of operations numerical simulations become unstable giving different results of the same input situations.
One site, in my experience, refused to accept compiler upgrades if the resulting newly compiled programs did not give the same bit perfect results between versions. This could result in long technical service engagements trying to understand if the new or old versions of the compiler was giving the “correct” results and what was causing the difference.
A couple of articles in this area :
- Cray Y-MP Floating Reciprocal Approximation Overview
- The IEEE standard for floating point arithmetic
- Geeks for Geek Explanation of IEEE numbers
- Wikipedia Link to IEEE_754