91 lines
3.8 KiB
Markdown
91 lines
3.8 KiB
Markdown
[Source](http://www.trnicely.net/pentbug/bugmail1.html "Permalink to Original Pentium FDIV flaw e-mail")
|
|
|
|
# Original Pentium FDIV flaw e-mail
|
|
|
|
####
|
|
|
|
|
|
|
|
FROM: Dr. Thomas R. Nicely
|
|
Professor of Mathematics
|
|
Lynchburg College
|
|
1501 Lakeside Drive
|
|
Lynchburg, Virginia 24501-3199
|
|
|
|
Phone: 804-522-8374
|
|
Fax: 804-522-8499
|
|
Internet: nicely@acavax.lynchburg.edu
|
|
|
|
TO: Whom it may concern
|
|
|
|
RE: Bug in the Pentium FPU
|
|
|
|
DATE: 30 October 1994
|
|
|
|
It appears that there is a bug in the floating point unit (numeric
|
|
coprocessor) of many, and perhaps all, Pentium processors.
|
|
|
|
In short, the Pentium FPU is returning erroneous values for certain
|
|
division operations. For example,
|
|
|
|
1/824633702441.0
|
|
|
|
is calculated incorrectly (all digits beyond the eighth significant digit
|
|
are in error). This can be verified in compiled code, an ordinary
|
|
spreadsheet such as Quattro Pro or Excel, or even the Windows calculator
|
|
(use the scientific mode), by computing
|
|
|
|
(824633702441.0)*(1/824633702441.0),
|
|
|
|
which should equal 1 exactly (within some extremely small rounding
|
|
error; in general, coprocessor results should contain 19 significant
|
|
decimal digits). However, the Pentiums tested return
|
|
|
|
0.999999996274709702
|
|
|
|
for this calculation. A similar erroneous value is obtained for x*(1/x)
|
|
for most values of x in the interval
|
|
|
|
824633702418 <= x <= 824633702449,
|
|
|
|
and throughout any interval obtained by multiplying or dividing the above
|
|
interval by an integer power of 2 (there are yet other intervals which
|
|
also produce division errors).
|
|
|
|
The bug can also be observed by calculating 1/(1/x) for the above values
|
|
of x. The Pentium FPU will fail to return the original x (in fact, it
|
|
will often return a value exactly 3072 = 6*0x200 larger).
|
|
|
|
The bug has been observed on all Pentiums I have tested or had tested to
|
|
date, including a Dell P90, a Gateway P90, a Micron P60, an Insight P60,
|
|
and a Packard-Bell P60. It has not been observed on any 486 or earlier
|
|
system, even those with a PCI bus. If the FPU is locked out (not always
|
|
possible), the error disappears; but then the Pentium becomes a "586SX",
|
|
and floating point must run in emulation, slowing down computations by
|
|
a factor of roughly ten.
|
|
|
|
I encountered erroneous results which were related to this bug as long
|
|
ago as June, 1994, but it was not until 19 October 1994 that I felt I had
|
|
eliminated all other likely sources of error (software logic, compiler,
|
|
chipset, etc.). I contacted Intel Tech Support regarding this bug on
|
|
Monday 24 October (call reference number 51270). The contact person later
|
|
reported that the bug was observed on a 66-MHz system at Intel, but had no
|
|
further information or explanation, other than the fact that no such bug
|
|
had been previously reported or observed.
|
|
|
|
Further information can be obtained by contacting me directly, and by
|
|
downloading files from the [anonymous.nicely.pentium_bug] directory of the
|
|
acavax.lynchburg.edu machine via anonymous ftp on Internet (password
|
|
ANONYMOUS, user ID = Internet ID). These files include a documentation
|
|
file, a DOS executable image demonstrating the bug, and the source code for
|
|
the demonstration. The zip file uses PKZIP version 2.04g.
|
|
|
|
I would be interested in hearing of test results from other Pentiums, and
|
|
also from 486-DX4s and (if anybody has one yet) the AMD, Cyrix, and NexGen
|
|
clones of the Pentium.
|
|
|
|
You may use this information freely as long as you give me attribution by
|
|
name and employer.
|
|
|
|
|