{"id":280590,"date":"2016-11-08T10:50:04","date_gmt":"2016-11-08T07:50:04","guid":{"rendered":"http:\/\/savepearlharbor.com\/?p=280590"},"modified":"-0001-11-30T00:00:00","modified_gmt":"-0001-11-29T21:00:00","slug":"","status":"publish","type":"post","link":"https:\/\/savepearlharbor.com\/?p=280590","title":{"rendered":"Bug Inside: \u043a\u0440\u043e\u0445\u043e\u0442\u043d\u044b\u0439 \u0448\u0430\u043d\u0441 \u0441\u0434\u0435\u043b\u0430\u0442\u044c \u0433\u0440\u043e\u043c\u0430\u0434\u043d\u0443\u044e \u043e\u0448\u0438\u0431\u043a\u0443 \u043d\u0430 Pentium Pro"},"content":{"rendered":"<p><i>\u00ab\u041e\u0448\u0438\u0431\u043a\u0430 \u0432 Pentium \u043d\u0430\u0441\u0442\u043e\u043b\u044c\u043a\u043e \u0441\u043f\u0435\u0446\u0438\u0444\u0438\u0447\u043d\u0430\u044f, \u0447\u0442\u043e \u043e\u0431\u044b\u0447\u043d\u044b\u0439 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044c \u0441\u0442\u043e\u043b\u043a\u043d\u0435\u0442\u0441\u044f \u0441 \u043d\u0435\u0439 \u0440\u0430\u0437 \u0432 27000 \u043b\u0435\u0442\u00bb<\/i><br \/>   \u2014 \u0440\u0443\u043a\u043e\u0432\u043e\u0434\u0441\u0442\u0432\u043e Intel<\/p>\n<p>  <i>\u00ab\u0412\u043e\u0442 \u0432\u0430\u043c \u043f\u0440\u0430\u0432\u0434\u043e\u043f\u043e\u0434\u043e\u0431\u043d\u044b\u0439 \u0441\u0446\u0435\u043d\u0430\u0440\u0438\u0439, \u043a\u043e\u0433\u0434\u0430 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044c \u0431\u0443\u0434\u0435\u0442 \u0441\u0442\u0430\u043b\u043a\u0438\u0432\u0430\u0442\u044c\u0441\u044f \u0441 \u043e\u0448\u0438\u0431\u043a\u043e\u0439 \u043a\u0430\u0436\u0434\u044b\u0435 3 \u043c\u0438\u043b\u043b\u0438\u0441\u0435\u043a\u0443\u043d\u0434\u044b\u00bb<\/i><br \/>   \u2014 \u0412\u043e\u044d\u043d \u041f\u0440\u0430\u0442\u0442 (\u0434\u0438\u0437\u0430\u0439\u043d\u0435\u0440 \u043b\u043e\u0433\u043e\u0442\u0438\u043f\u0430 SUN \u0438 \u0441\u043e\u0430\u0432\u0442\u043e\u0440 <a href=\"https:\/\/ru.wikipedia.org\/wiki\/%D0%90%D0%BB%D0%B3%D0%BE%D1%80%D0%B8%D1%82%D0%BC_%D0%9A%D0%BD%D1%83%D1%82%D0%B0_%E2%80%94_%D0%9C%D0%BE%D1%80%D1%80%D0%B8%D1%81%D0%B0_%E2%80%94_%D0%9F%D1%80%D0%B0%D1%82%D1%82%D0%B0\">\u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c\u0430 \u041a\u043d\u0443\u0442\u0430-\u041c\u043e\u0440\u0440\u0438\u0441\u0430-\u041f\u0440\u0430\u0442\u0442\u0430<\/a>)<\/p>\n<div style=\"text-align:center;\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/files\/474\/fa9\/2c5\/474fa92c5a084a1b80a86b1d805bd921.jpg\" \/><\/div>\n<p><i>66 MHz Intel Pentium (sSpec=SX837) with the FDIV bug<\/i><\/p>\n<p>  <b>\u0412\u043e\u043f\u0440\u043e\u0441:<\/b> \u0421\u043a\u043e\u043b\u044c\u043a\u043e \u043d\u0443\u0436\u043d\u043e \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a\u043e\u0432 Pentium \u0447\u0442\u043e\u0431\u044b \u0432\u043a\u0440\u0443\u0442\u0438\u0442\u044c \u043b\u0430\u043c\u043f\u043e\u0447\u043a\u0443?<br \/>  <b>\u041e\u0442\u0432\u0435\u0442:<\/b> 1.99904274017, \u0442\u0430\u043a\u043e\u0439 \u043e\u0442\u0432\u0435\u0442 \u0434\u043e\u043b\u0436\u0435\u043d \u0443\u0434\u043e\u0432\u043b\u0435\u0442\u0432\u043e\u0440\u0438\u0442\u044c \u043b\u044e\u0434\u0435\u0439 \u0431\u0435\u0437 \u0442\u0435\u0445\u043d\u0438\u0447\u0435\u0441\u043a\u043e\u0433\u043e \u043e\u0431\u0440\u0430\u0437\u043e\u0432\u0430\u043d\u0438\u044f.<\/p>\n<p>  \u0410 \u0442\u0435\u043f\u0435\u0440\u044c \u0433\u043b\u0430\u0432\u043d\u044b\u0439 \u0432\u043e\u043f\u0440\u043e\u0441: \u00ab\u0427\u0435\u043c \u0437\u0430\u043d\u0438\u043c\u0430\u043b\u0441\u044f \u0422\u043e\u043c\u0430\u0441 \u041d\u0430\u0439\u0441\u043b\u0438 \u0441 \u043d\u0430\u0447\u0430\u043b\u0430 \u0438\u044e\u043d\u044f \u0434\u043e \u043a\u043e\u043d\u0446\u0430 \u043e\u043a\u0442\u044f\u0431\u0440\u044f 1994 \u0433\u043e\u0434\u0430?\u00bb<br \/>  <a name=\"habracut\"><\/a>  <\/p>\n<div style=\"text-align:center;\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/post_images\/faa\/8aa\/790\/faa8aa79099941f83387ba51d8e8b0df.jpg\" alt=\"image\" \/><\/div>\n<h2>\u0422\u043e\u043c\u0430\u0441\u043e\u043c \u041d\u0430\u0439\u0441\u043b\u0438 (<a href=\"http:\/\/www.trnicely.net\/\">Thomas Nicely<\/a>)<\/h2>\n<p>  <\/p>\n<div style=\"text-align:center;\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/post_images\/3b1\/5ee\/2c8\/3b15ee2c8cdcecdf47e86d0e9bae39c8.jpg\" alt=\"image\" \/><\/div>\n<p>  \u0412 \u0443\u043d\u0438\u0432\u0435\u0440\u0441\u0438\u0442\u0435\u0442\u0435 \u043f\u0440\u043e\u0444\u0435\u0441\u0441\u043e\u0440 \u041d\u0430\u0439\u0441\u043b\u0438 \u0438\u0441\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u043b \u043f\u0430\u0440\u044b, \u0442\u0440\u0438\u043f\u043b\u0435\u0442\u044b \u0438 \u043a\u0432\u0430\u0434\u0440\u0430\u043f\u043b\u0435\u0442\u044b \u043f\u0440\u043e\u0441\u0442\u044b\u0445 \u0447\u0438\u0441\u0435\u043b. \u0412 \u043c\u0430\u0440\u0442\u0435 1994 \u043c\u0430\u0442\u0435\u043c\u0430\u0442\u0438\u043a \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0438\u043b \u043a \u0432\u044b\u0447\u0438\u0441\u043b\u0435\u043d\u0438\u044f\u043c Pentium, \u0430 <b>12.9991523619 \u0438\u044e\u043d\u044f<\/b> 1994 \u0433\u043e\u0434\u0430 \u0437\u0430\u0441\u0435\u043a \u043d\u0435\u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0438\u044f \u0432 \u0446\u0438\u0444\u0435\u0440\u043a\u0430\u0445. \u0413\u0434\u0435 \u0436\u0435 \u043e\u0448\u0438\u0431\u043a\u0430?<\/p>\n<p>  \u041f\u0440\u043e\u0448\u043b\u043e 5 \u043c\u0435\u0441\u044f\u0446\u0435\u0432.<\/p>\n<div style=\"text-align:center;\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/files\/612\/5ae\/7c0\/6125ae7c01b843df99bd867054c8f00b.jpg\" \/><\/div>\n<div style=\"text-align:center;\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/files\/146\/c22\/599\/146c225992464d55807437a495c06956.jpg\" \/><\/div>\n<p>  <b>29.9999973251 \u043e\u043a\u0442\u044f\u0431\u0440\u044f<\/b> \u0422\u043e\u043c\u0430\u0441 \u041d\u0430\u0439\u0441\u043b\u0438 \u0441\u043e\u043e\u0431\u0449\u0438\u043b \u043e \u043d\u0430\u0445\u043e\u0434\u043a\u0435 Andrew Schulman, \u0430\u0432\u0442\u043e\u0440\u0443 \u00abUndocumented Windows\u00bb, \u00abUndocumented DOS\u00bb. \u0422\u0430\u043a \u043a\u0430\u043a \u0443 \u0428\u0443\u043b\u044c\u0442\u043c\u0430\u043d\u0430 \u043d\u0435 \u0431\u044b\u043b\u043e \u0441\u0432\u043e\u0435\u0433\u043e Pentium, <b>0.9999999998 \u043d\u043e\u044f\u0431\u0440\u044f<\/b> \u043e\u043d \u043e\u0431\u0440\u0430\u0442\u0438\u043b\u0441\u044f \u043a Richard Smith, \u043e\u0441\u043d\u043e\u0432\u0430\u0442\u0435\u043b\u044e <a href=\"https:\/\/ru.wikipedia.org\/wiki\/Phar_Lap\">Phar Lap<\/a>, \u0447\u0442\u043e\u0431\u044b \u0442\u043e\u0442 \u043f\u0440\u043e\u0442\u0435\u0441\u0442\u0438\u0440\u043e\u0432\u0430\u043b \u0441\u0432\u043e\u0439 \u043a\u043e\u043c\u043f \u043d\u0430 \u043d\u0430\u043b\u0438\u0447\u0438\u0435 \u0431\u0430\u0433\u0430. \u0412 Phar Lap \u043e\u043d\u0438 \u0431\u044b\u0441\u0442\u0440\u0435\u043d\u044c\u043a\u043e \u043f\u043e\u0434\u0442\u0432\u0435\u0440\u0434\u0438\u043b\u0438 \u043d\u0430\u043b\u0438\u0447\u0438\u0435 \u043e\u0448\u0438\u0431\u043a\u0438 \u043f\u0440\u0438 \u0434\u0435\u043b\u0435\u043d\u0438\u0438, \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e Windows calculator \u0438 \u043f\u0440\u043e\u0441\u0442\u0435\u043d\u044c\u043a\u043e\u0439 \u043f\u0440\u043e\u0433\u0438 \u043d\u0430 \u0421. <\/p>\n<p>  Richard Smith \u043f\u0435\u0440\u0435\u0441\u043b\u0430\u043b \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u0435 \u0422\u043e\u043c\u0430\u0441\u0430 \u041d\u0430\u0439\u0441\u043b\u0438 \u0432 Intel \u0438 \u0435\u0449\u0435 \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u043a\u0440\u0443\u043f\u043d\u0435\u0439\u0448\u0438\u0445 \u043a\u043e\u043c\u043f\u0430\u043d\u0438\u0439 \u0442\u043e\u0433\u043e \u0432\u0440\u0435\u043c\u0435\u043d\u0438: Microsoft, Metaware, Watcom, \u0438 \u043f\u0440. Richard Smith \u0442\u0430\u043a \u0436\u0435 \u043e\u043f\u0443\u0431\u043b\u0438\u043a\u043e\u0432\u0430\u043b \u043d\u043e\u0432\u043e\u0441\u0442\u044c \u043d\u0430 \u0444\u043e\u0440\u0443\u043c\u0435 Canopus \u0438 \u044d\u0442\u043e \u0431\u044b\u043b\u043e \u043f\u0435\u0440\u0432\u044b\u043c \u043f\u0443\u0431\u043b\u0438\u0447\u043d\u044b\u043c \u0443\u043f\u043e\u043c\u0438\u043d\u0430\u043d\u0438\u0435\u043c \u043e \u0431\u0430\u0433\u0435.<\/p>\n<p>  \u0417\u0430 24 \u0447\u0430\u0441\u0430 \u043f\u043e\u0441\u0442\u0443\u043f\u0438\u043b\u0438 \u0431\u043e\u043b\u0435\u0435 9.9999973251 \u043f\u043e\u0434\u0442\u0432\u0435\u0440\u0436\u0434\u0435\u043d\u0438\u0439 \u043d\u0430\u043b\u0438\u0447\u0438\u044f \u0431\u0430\u0433\u0430 \u0432 \u0440\u0430\u0437\u043b\u0438\u0447\u043d\u044b\u0445 Pentium-\u0441\u0438\u0441\u0442\u0435\u043c\u0430\u0445.<\/p>\n<div class=\"spoiler\"><b class=\"spoiler_title\">\u041f\u0438\u0441\u044c\u043c\u043e \u0422\u043e\u043c\u0430\u0441\u0430 \u041d\u0430\u0439\u0441\u043b\u0438 30 \u043e\u043a\u0442\u044f\u0431\u0440\u044f \u0441 \u043e\u043f\u0438\u0441\u0430\u043d\u0438\u0435\u043c \u0431\u0430\u0433\u0430<\/b><\/p>\n<div class=\"spoiler_text\">FROM: Dr. Thomas R. Nicely<br \/>   Professor of Mathematics<br \/>   Lynchburg College<br \/>   1501 Lakeside Drive<br \/>   Lynchburg, Virginia 24501-3199<\/p>\n<p>  Phone: 804-522-8374<br \/>   Fax: 804-522-8499<br \/>   Internet: nicely@acavax.lynchburg.edu<\/p>\n<p>  TO: Whom it may concern<\/p>\n<p>  RE: Bug in the Pentium FPU<\/p>\n<p>  DATE: 30 October 1994<\/p>\n<p>  It appears that there is a bug in the floating point unit (numeric<br \/>  coprocessor) of many, and perhaps all, Pentium processors.<\/p>\n<p>  In short, the Pentium FPU is returning erroneous values for certain<br \/>  division operations. For example,<\/p>\n<p>  1\/824633702441.0<\/p>\n<p>  is calculated incorrectly (all digits beyond the eighth significant digit<br \/>  are in error). This can be verified in compiled code, an ordinary<br \/>  spreadsheet such as Quattro Pro or Excel, or even the Windows calculator<br \/>  (use the scientific mode), by computing<\/p>\n<p>  (824633702441.0)*(1\/824633702441.0),<\/p>\n<p>  which should equal 1 exactly (within some extremely small rounding<br \/>  error; in general, coprocessor results should contain 19 significant<br \/>  decimal digits). However, the Pentiums tested return<\/p>\n<p>  0.999999996274709702<\/p>\n<p>  for this calculation. A similar erroneous value is obtained for x*(1\/x)<br \/>  for most values of x in the interval<\/p>\n<p>  824633702418 &lt;= x &lt;= 824633702449,<\/p>\n<p>  and throughout any interval obtained by multiplying or dividing the above<br \/>  interval by an integer power of 2 (there are yet other intervals which<br \/>  also produce division errors).<\/p>\n<p>  The bug can also be observed by calculating 1\/(1\/x) for the above values<br \/>  of x. The Pentium FPU will fail to return the original x (in fact, it<br \/>  will often return a value exactly 3072 = 6*0x200 larger).<\/p>\n<p>  The bug has been observed on all Pentiums I have tested or had tested to<br \/>  date, including a Dell P90, a Gateway P90, a Micron P60, an Insight P60,<br \/>  and a Packard-Bell P60. It has not been observed on any 486 or earlier<br \/>  system, even those with a PCI bus. If the FPU is locked out (not always<br \/>  possible), the error disappears; but then the Pentium becomes a \u00ab586SX\u00bb,<br \/>  and floating point must run in emulation, slowing down computations by<br \/>  a factor of roughly ten.<\/p>\n<p>  I encountered erroneous results which were related to this bug as long<br \/>  ago as June, 1994, but it was not until 19 October 1994 that I felt I had<br \/>  eliminated all other likely sources of error (software logic, compiler,<br \/>  chipset, etc.). I contacted Intel Tech Support regarding this bug on<br \/>  Monday 24 October (call reference number 51270). The contact person later<br \/>  reported that the bug was observed on a 66-MHz system at Intel, but had no<br \/>  further information or explanation, other than the fact that no such bug <br \/>  had been previously reported or observed.<\/p>\n<p>  Further information can be obtained by contacting me directly, and by<br \/>  downloading files from the [anonymous.nicely.pentium_bug] directory of the<br \/>  acavax.lynchburg.edu machine via anonymous ftp on Internet (password<br \/>  ANONYMOUS, user ID = Internet ID). These files include a documentation<br \/>  file, a DOS executable image demonstrating the bug, and the source code for<br \/>  the demonstration. The zip file uses PKZIP version 2.04g.<\/p>\n<p>  I would be interested in hearing of test results from other Pentiums, and<br \/>  also from 486-DX4s and (if anybody has one yet) the AMD, Cyrix, and NexGen<br \/>  clones of the Pentium.<\/p>\n<p>  You may use this information freely as long as you give me attribution by<br \/>  name and employer.<\/p>\n<p>  <a href=\"http:\/\/www.trnicely.net\/pentbug\/bugmail1.html\">www.trnicely.net\/pentbug\/bugmail1.html<\/a>  <\/div>\n<\/div>\n<p>  <\/p>\n<div class=\"spoiler\"><b class=\"spoiler_title\">\u041f\u0438\u0441\u044c\u043c\u043e \u043e\u0442 30 \u043e\u043a\u0442\u044f\u0431\u0440\u044f Nicely &#8212; Schulman<\/b><\/p>\n<div class=\"spoiler_text\">======== Oct. 30 \u2014 Dr. Nicely&#8217;s Email to Andrew Schulman ===============<\/p>\n<p>  2351 S0\/CompuServe Mail [MAIL]<br \/>   30-Oct-94 15:25 EST<br \/>   Sb: Pentium FPU Bug<br \/>   Fm: INTERNET:nicely@ACAVAX.LYNCHBURG.EDU<\/p>\n<p>  Sender: nicely@acavax.lynchburg.edu<br \/>   Received: from ACAVAX.LYNCHBURG.EDU by arl-img-2.compuserve.com<br \/>   (8.6.4\/5.940406sam)<br \/>   id PAA15607; Sun, 30 Oct 1994 15:21:00 -0500<br \/>   From: <br \/>   Received: by ACAVAX.LYNCHBURG.EDU (MX V4.0 VAX) id 29; Sun, 30 Oct 1994<br \/>   15:20:50 EST<br \/>   Date: Sun, 30 Oct 1994 15:20:49 EST<br \/>   To: 76320.302@COMPUSERVE.COM [[RMS: Andrew Schulman]]<br \/>   Message-ID: &lt;00986B92.4921C4D0.29@ACAVAX.LYNCHBURG.EDU&gt;<br \/>   Subject: Pentium FPU Bug<\/p>\n<p>  FROM: Dr. Thomas R. Nicely<br \/>   Professor of Mathematics<br \/>   Lynchburg College<br \/>   1501 Lakeside Drive<br \/>   Lynchburg, Virginia 24501-3199<\/p>\n<p>  Phone: 804-522-8374<br \/>   Fax: 804-522-8499<br \/>   Internet: nicely@acavax.lynchburg.edu<\/p>\n<p>  TO: Whom it may concern<\/p>\n<p>  RE: Bug in the Pentium FPU<\/p>\n<p>  DATE: 30 October 1994<\/p>\n<p>  It appears that there is a bug in the floating point unit (numeric<br \/>  coprocessor) of many, and perhaps all, Pentium processors.<\/p>\n<p>  [[RMS: The rest of Dr. Nicely&#8217;s message follows]]  <\/div>\n<\/div>\n<p>  <\/p>\n<div class=\"spoiler\"><b class=\"spoiler_title\">\u041f\u0438\u0441\u044c\u043c\u043e \u043e\u0442 1 \u043d\u043e\u044f\u0431\u0440\u044f Schulman &#8212; Smith<\/b><\/p>\n<div class=\"spoiler_text\">======= Nov. 1 \u2014 Andrew Schulman&#8217;s Email to Richard Smith ==============<\/p>\n<p>  From uunet!compuserve.com!76320.302 Tue Nov 1 09:44:32 1994<br \/>   Date: 01 Nov 94 09:27:48 EST<br \/>   From: Andrew Schulman <br \/>   To: <br \/>   Subject: Bug in Pentium?<br \/>   Status: RO<\/p>\n<p>  Richard,<\/p>\n<p>  Have you heard anything about this?<\/p>\n<p>  Andrew<\/p>\n<p>   \u2014 Forwarded Message \u2014  <br \/>   #: 2351 S0\/CompuServe Mail [MAIL]<br \/>   30-Oct-94 15:25 EST<br \/>   Sb: Pentium FPU Bug<br \/>   Fm: INTERNET:nicely@ACAVAX.LYNCHBURG.EDU<\/p>\n<p>  [[RMS: The rest of Dr. Nicely&#8217;s message follows]]  <\/div>\n<\/div>\n<p>  <\/p>\n<div class=\"spoiler\"><b class=\"spoiler_title\">\u041f\u043e\u0441\u0442 Richard Smith \u043d\u0430 \u0444\u043e\u0440\u0443\u043c\u0435 Canopus<\/b><\/p>\n<div class=\"spoiler_text\">======= Nov. 1 \u2014 Richard Smith&#8217;s post to the Canopus froum on CIS ======<\/p>\n<p>  263767 S1\/General Information<br \/>   01-Nov-94 22:40:54<br \/>   Sb: Bug in Pentium Chip?!?!?<br \/>   Fm: Richard Smith [Phar Lap] 75070,2253 To: All<\/p>\n<p>  A friend of mine sent the attached message to me today. It seems that a Dr.<br \/>  Nicely at Lynchburg College has apparently found a bug in the Pentium floating<br \/>  point unit. The message provides the details. For certain values, it appears<br \/>  the Pentium processor gets the wrong answer for the floating point divide<br \/>  operation. The interesting thing is that the problem can be easily duplicated<br \/>  by running the Windows calculator. I was wondering if folks reading this<br \/>  message could try duplicating the problem on any Pentium systems that they own<br \/>  and post the results here on Canopus. Please provide details of the machine<br \/>  configuration that you are running on. A few people that I know have already<br \/>  have gotten the same incorrect results as Dr. Nicely.<\/p>\n<p>  Richard Smith<\/p>\n<p>  [[RMS: Dr. Nicely&#8217;s message follows]]  <\/div>\n<\/div>\n<p>  <b>\u041f\u0443\u0431\u043b\u0438\u043a\u0430\u0446\u0438\u0438 \u0422\u043e\u043c\u0430\u0441\u0430 \u041d\u0430\u0439\u0441\u043b\u0438 \u043f\u043e \u043f\u043e\u0432\u043e\u0434\u0443 \u0431\u0430\u0433\u0430<\/b>  <\/p>\n<ul>\n<li>A personal FAQ regarding the Pentium division flaw. Bibliography attached. Last updated 0900 GMT 19 August 2011.<\/li>\n<li>Original e-mail message announcing the discovery of the Pentium division flaw, 30 October 1994.<\/li>\n<li>An account by Richard M. Smith, President of Phar Lap Software, Inc., of the spread of the Pentium flaw announcement across the Internet during the first few days.<\/li>\n<li>pentbug.zip, a zipfile containing the C source code (pentbug.c) and corresponding DOS executables (pentbug.exe and bug16bit.exe) for a program which will check for the flaw.<\/li>\n<li>The Pentium division flaw. Thomas R. Nicely. Virginia Scientists Newsletter, Volume 1 (April, 1995), p. 3.<\/li>\n<li>Untitled article concerning the Pentium division flaw. Thomas R. Nicely. San Francisco Examiner (18 December 1994), p. B-5.<\/li>\n<\/ul>\n<h2>\u041f\u0440\u0435\u0441\u0441\u0430<\/h2>\n<p>  <b>6.9999831538 \u043d\u043e\u044f\u0431\u0440\u044f<\/b> Alex Wolfe \u043f\u0443\u0431\u043b\u0438\u043a\u0443\u0435\u0442 \u0441\u0442\u0430\u0442\u044c\u044e \u0432 Electronic Engineering Times.<\/p>\n<p>  \u041e\u0442\u0432\u0435\u0447\u0430\u044f \u043d\u0430 \u0437\u0430\u043f\u0440\u043e\u0441 Alex Wolfe, Intel \u0437\u0430\u044f\u0432\u0438\u043b\u0430, \u0447\u0442\u043e \u043e\u043d\u0438 \u043e\u0431\u043d\u0430\u0440\u0443\u0436\u0438\u043b\u0438 \u044d\u0442\u0443 \u043e\u0448\u0438\u0431\u043a\u0443 \u043b\u0435\u0442\u043e\u043c 1994 \u0433\u043e\u0434\u0430, \u0438 \u043e\u043d\u0430 \u0431\u044b\u043b\u0430 \u0438\u0441\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0430 \u0432 \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u043e\u0440\u0430\u0445, \u0432\u044b\u043f\u0443\u0449\u0435\u043d\u043d\u044b\u0445 \u043f\u043e\u0437\u0434\u043d\u0435\u0435. \u041e\u0434\u043d\u0430\u043a\u043e Intel \u043d\u0435 \u0441\u043c\u043e\u0433\u043b\u0430 \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0438\u0442\u044c \u0447\u0438\u0441\u043b\u043e \u0432\u044b\u043f\u0443\u0449\u0435\u043d\u043d\u044b\u0445 \u0434\u0435\u0444\u0435\u043a\u0442\u043d\u044b\u0445 \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u043e\u0440\u043e\u0432, \u0438 \u043e\u043d\u0438 \u043f\u043e\u043f\u044b\u0442\u0430\u043b\u0438\u0441\u044c \u0441\u0433\u043b\u0430\u0434\u0438\u0442\u044c \u0432\u0430\u0436\u043d\u043e\u0441\u0442\u044c \u044d\u0442\u043e\u0439 \u043e\u0448\u0438\u0431\u043a\u0438. <\/p>\n<p>  \u041f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u0438\u0442\u0435\u043b\u044c Intel, \u043f\u043e\u0434\u0447\u0435\u0440\u043a\u043d\u0443\u043b, \u0447\u0442\u043e \u044d\u0442\u043e\u0442 \u0434\u0435\u0444\u0435\u043a\u0442 \u043d\u0435 \u043f\u043e\u0432\u043b\u0438\u044f\u0435\u0442 \u043d\u0430 \u0441\u0440\u0435\u0434\u043d\u0435\u0433\u043e \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044f. \u0413\u043e\u0432\u043e\u0440\u044f \u043e \u041d\u0430\u0439\u0441\u0435\u043b\u0438, \u0421\u043c\u0438\u0442 \u0441\u043a\u0430\u0437\u0430\u043b: \u00ab\u042d\u0442\u043e \u0438\u0441\u043a\u043b\u044e\u0447\u0438\u0442\u0435\u043b\u044c\u043d\u044b\u0439 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044c. \u041e\u043d \u043a\u0440\u0443\u0433\u043b\u043e\u0441\u0443\u0442\u043e\u0447\u043d\u043e \u043f\u0440\u043e\u0432\u043e\u0434\u0438\u0442 \u0432\u044b\u0447\u0438\u0441\u043b\u0435\u043d\u0438\u044f \u043e\u0431\u0440\u0430\u0442\u043d\u044b\u0445 \u0432\u0435\u043b\u0438\u0447\u0438\u043d. \u0422\u043e, \u0447\u0442\u043e \u043e\u043d \u043e\u0431\u043d\u0430\u0440\u0443\u0436\u0438\u043b \u043f\u043e\u0441\u043b\u0435 \u043c\u043d\u043e\u0433\u0438\u0445 \u043c\u0435\u0441\u044f\u0446\u0435\u0432 \u0432\u044b\u0447\u0438\u0441\u043b\u0435\u043d\u0438\u0439, \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u043f\u0440\u0438\u043c\u0435\u0440\u043e\u043c \u0442\u043e\u0433\u043e, \u0447\u0442\u043e \u0432\u043e\u0441\u0435\u043c\u044c \u0434\u0435\u0441\u044f\u0442\u0438\u0447\u043d\u044b\u0445 \u0447\u0438\u0441\u0435\u043b \u043f\u0440\u0430\u0432\u0438\u043b\u044c\u043d\u044b \u0438 \u0442\u043e\u043b\u044c\u043a\u043e \u0434\u0435\u0432\u044f\u0442\u0430\u044f \u043e\u0442\u043e\u0431\u0440\u0430\u0436\u0430\u0435\u0442\u0441\u044f \u043d\u0435\u0432\u0435\u0440\u043d\u043e. \u0422\u043e \u0435\u0441\u0442\u044c \u043e\u0448\u0438\u0431\u043a\u0430 \u0443 \u0432\u0430\u0441 \u0431\u0443\u0434\u0435\u0442 \u0442\u043e\u043b\u044c\u043a\u043e \u0432 \u0434\u0435\u0432\u044f\u0442\u043e\u043c \u0437\u043d\u0430\u043a\u0435 \u0441\u043f\u0440\u0430\u0432\u0430 \u043e\u0442 \u0442\u043e\u0447\u043a\u0438. \u042f \u0434\u0443\u043c\u0430\u044e, \u0447\u0442\u043e, \u0434\u0430\u0436\u0435 \u0435\u0441\u043b\u0438 \u0432\u044b \u0438\u043d\u0436\u0435\u043d\u0435\u0440, \u0432\u044b \u044d\u0442\u043e\u0433\u043e \u043d\u0435 \u0437\u0430\u043c\u0435\u0442\u0438\u0442\u0435\u00bb. [<a href=\"https:\/\/www.cs.drexel.edu\/~introcs\/F2K\/lectures\/5_Scientific\/PentiumFDIV\/EE%20Times.txt\">\u0438\u0441\u0442\u043e\u0447\u043d\u0438\u043a<\/a>]<\/p>\n<p>  <b>21.9999103517 \u043d\u043e\u044f\u0431\u0440\u044f<\/b> 1994 \u0433\u043e\u0434\u0430 CNN \u0440\u0430\u0441\u043f\u0440\u043e\u0441\u0442\u0440\u0430\u043d\u0438\u043b\u0430 \u044d\u0442\u043e \u0437\u0430\u044f\u0432\u043b\u0435\u043d\u0438\u0435 \u0438 \u0432\u0441\u043a\u043e\u0440\u0435 \u043e\u043d\u043e \u0431\u044b\u043b\u043e \u0432\u043e \u0432\u0441\u0435\u0445 \u0433\u043b\u0430\u0432\u043d\u044b\u0445 \u0441\u0440\u0435\u0434\u0441\u0442\u0432\u0430\u0445 \u043c\u0430\u0441\u0441\u043e\u0432\u043e\u0439 \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u0438, \u0442\u0430\u043a\u0438\u0445, \u043a\u0430\u043a New York Times \u0438 Associated Press. \u0412 \u0434\u0440\u0443\u0433\u0438\u0445 \u0438\u043d\u0442\u0435\u0440\u0432\u044c\u044e Intel \u043f\u043e\u0432\u0442\u043e\u0440\u044f\u043b\u0430 \u0441\u0432\u043e\u0435 \u0440\u0430\u043d\u043d\u0435\u0435 \u0437\u0430\u044f\u0432\u043b\u0435\u043d\u0438\u0435 \u043e \u0442\u043e\u043c, \u0447\u0442\u043e \u043e\u0448\u0438\u0431\u043a\u0430 \u043d\u0435\u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0435\u043d\u043d\u0430 \u0434\u043b\u044f \u0441\u0440\u0435\u0434\u043d\u0435\u0433\u043e \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044f.<\/p>\n<p>  Intel \u0437\u0430\u044f\u0432\u0438\u043b\u0430, \u0447\u0442\u043e \u043e\u043d\u0438 \u043d\u0435 \u0441\u0447\u0438\u0442\u0430\u044e\u0442 \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u044b\u043c \u043e\u0442\u0437\u044b\u0432\u0430\u0442\u044c \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u043e\u0440, \u0443\u0442\u0432\u0435\u0440\u0436\u0434\u0430\u044f, \u0447\u0442\u043e <b>\u043e\u0431\u044b\u0447\u043d\u044b\u0439 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044c \u0438\u043c\u0435\u0435\u0442 \u0442\u043e\u043b\u044c\u043a\u043e \u043e\u0434\u0438\u043d \u0448\u0430\u043d\u0441 \u0438\u0437 \u0434\u0435\u0432\u044f\u0442\u0438 \u043c\u0438\u043b\u043b\u0438\u0430\u0440\u0434\u043e\u0432 \u043f\u043e\u043b\u0443\u0447\u0438\u0442\u044c \u043d\u0435\u0432\u0435\u0440\u043d\u044b\u0439 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442<\/b> \u0438\u0437-\u0437\u0430 \u044d\u0442\u043e\u0439 \u043e\u0448\u0438\u0431\u043a\u0438 \u0438 \u0442\u0430\u043a\u0438\u043c \u043e\u0431\u0440\u0430\u0437\u043e\u043c <b>\u043d\u0435 \u0431\u0443\u0434\u0435\u0442 \u043d\u0438\u043a\u0430\u043a\u0438\u0445 \u0437\u0430\u043c\u0435\u0442\u043d\u044b\u0445 \u043f\u043e\u0441\u043b\u0435\u0434\u0441\u0442\u0432\u0438\u0439<\/b> \u0434\u043b\u044f \u043a\u043e\u043c\u043f\u044c\u044e\u0442\u0435\u0440\u043e\u0432 \u0434\u043e\u043c\u0430 \u0438 \u0432 \u043e\u0444\u0438\u0441\u0435. <\/p>\n<h2>Tim Coe<\/h2>\n<p>  <b>27.9999414610 \u043d\u043e\u044f\u0431\u0440\u044f<\/b> 1994 \u0433\u043e\u0434\u0430 \u0422\u0438\u043c \u041a\u043e\u0443 (Tim Coe) \u0438\u0437 \u043a\u043e\u043c\u043f\u0430\u043d\u0438\u0438 Vitess Semiconductor \u043e\u043f\u0443\u0431\u043b\u0438\u043a\u043e\u0432\u0430\u043b \u0441\u0442\u0430\u0442\u044c\u044e \u0432 \u0433\u0440\u0443\u043f\u043f\u0435 \u043d\u043e\u0432\u043e\u0441\u0442\u0435\u0439 comp.sys.intel, \u0432 \u043a\u043e\u0442\u043e\u0440\u043e\u0439 \u043e\u043d \u00ab\u0440\u0435\u0432\u0435\u0440\u0441\u043d\u0443\u043b\u00bb \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044e \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c\u0430 \u0438 \u043f\u0440\u0435\u0434\u043b\u043e\u0436\u0438\u043b \u043c\u043e\u0434\u0435\u043b\u044c \u043f\u043e\u0432\u0435\u0434\u0435\u043d\u0438\u044f \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u043e\u0440\u0430 Pentium. \u0427\u0435\u0440\u0435\u0437 \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0434\u043d\u0435\u0439 \u043f\u043e\u044f\u0432\u0438\u043b\u0438\u0441\u044c \u0430\u043f\u043f\u0430\u0440\u0430\u0442\u043d\u044b\u0435 \u0438 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u043d\u044b\u0435 \u00ab\u0437\u0430\u043f\u043b\u0430\u0442\u043a\u0438\u00bb \u0434\u043b\u044f \u043e\u0448\u0438\u0431\u043a\u0438.<\/p>\n<div class=\"spoiler\"><b class=\"spoiler_title\">\u041e\u0440\u0438\u0433\u0438\u043d\u0430\u043b \u043f\u0438\u0441\u044c\u043c\u0430 \u0422\u0438\u043c\u0430 \u041a\u043e\u0443 28 \u043d\u043e\u044f\u0431\u0440\u044f<\/b><\/p>\n<div class=\"spoiler_text\">Newsgroups: comp.sys.intel<br \/>  From: coe@vitsemi.com (Tim Coe)<br \/>  Subject: Re: Glaring FDIV bug in Pentium!<br \/>  Sender: coe@vitsemi.com (Tim Coe)<br \/>  Organization: Vitesse Semiconductor<br \/>  Date: Mon, 28 Nov 94 06:33:42 GMT<br \/>  Lines: 548<\/p>\n<p>  There is a C model of the Pentium hardware divider<br \/>  at the end of this message that accurately predicted<br \/>  many of the stated failing divides, and accurately<br \/>  confirms all failing divides of which I am aware.<\/p>\n<p>  I worked on an IEEE hardware FPU from 1989-1991.<br \/>  As an FPU designer I am naturally interested in<br \/>  algorithms for hardware arithmetic. I am currently<br \/>  working on something completely different, but I<br \/>  still occasionally support related development<br \/>  tasks.<\/p>\n<p>  I saw the first post relating to the Pentium FDIV<br \/>  bug in comp.sys.intel. When I saw the post from<br \/>  Andreas Gruss (included), I saw a pattern and the<br \/>  opportunity to completely reverse engineer Intel&#8217;s<br \/>  divider. I took to this task with great vigor, as<br \/>  it is very rare that one gets visibility into the<br \/>  details of someone else&#8217;s leading edge design.<\/p>\n<p>  I decided to post my results when it appeared<br \/>  to me that Intel was not coming clean with the<br \/>  characteristics of the bug. The best characteristic<br \/>  and only characteristic of the bug to come from<br \/>  Intel is its 1 in 9 billion probability of occurring<br \/>  with random operands. The worst characteristic<br \/>  of the bug is that the specific operands that are most at<br \/>  risk are integers \u00b1 very small deltas. The<br \/>  integers 3, 9, 15, 21, and 27 minus very small<br \/>  deltas are THE at risk divisors. (In particular the<br \/>  maximum expressible single precision, double precision,<br \/>  and extended precision numbers less than 3, 9&#8230;27 are<br \/>  all seriously at risk divisors.) The other bad<br \/>  characteristic of this bug that I did not hear<br \/>  from Intel is that the worst case error induced<br \/>  by the bug was considerably greater than the 4 parts<br \/>  per billion error observed by Professor Nicely.<\/p>\n<p>  It appeared to me that Intel was attempting to<br \/>  minimize its exposure by focusing on the 1 in 9<br \/>  billion probability of error that it publicized and<br \/>  the 4 part per billion error observed by Professor<br \/>  Nicely. I posted my conclusions so that the Intel<br \/>  user community could be a peer to Intel when determining<br \/>  what applications may be at risk due to this bug.<\/p>\n<p>  I think Intel does outstanding technical work. After<br \/>  all, the only reason I was reading comp.sys.intel was<br \/>  that I was considering the purchase of a P90 system.<br \/>  After this brouhaha I will still buy a P90 system, though<br \/>  when I do I will ask for a fixed chip and a guarantee<br \/>  that if I find after receiving my system that it does<br \/>  not contain said fixed chip that the seller will<br \/>  replace the unfixed chip posthaste. I regard the<br \/>  fact that the bug occurred as completely excusable,<br \/>  for I have designed many chips and therefore designed<br \/>  many bugs.<\/p>\n<p>  I posted an additional program not included here<br \/>  that scanned single precision operands for errors<br \/>  induced that were greater that one single precision<br \/>  least significant bit. I received back a list of<br \/>  1738 problem single precision divisions (out of 64<br \/>  trillion). Herb Savage provided the list.<\/p>\n<p>  The following divisors and their binary scalings<br \/>  (by this I mean different only in the binary exponent)<br \/>  appear to account for &gt;95% of the divide errors:<\/p>\n<p>  3.0 &gt; divisor &gt;= 3.0 \u2014 36*(2^-22)<br \/>   9.0 &gt; divisor &gt;= 9.0 \u2014 36*(2^-20)<br \/>   15.0 &gt; divisor &gt;= 15.0 \u2014 36*(2^-20)<br \/>   21.0 &gt; divisor &gt;= 21.0 \u2014 36*(2^-19)<br \/>   27.0 &gt; divisor &gt;= 27.0 \u2014 36*(2^-19)<\/p>\n<p>  A divide with a divisor in one of the above ranges<br \/>  has roughly a 1 in 200000 chance of suffering loss<br \/>  of precision in double extended precision operations.<br \/>  The other &lt;5% of the divide errors can be accounted<br \/>  for by changing the above 36 to 2048.<\/p>\n<p>  All dividends are somewhat at risk versus the above<br \/>  divisors. The following formula identifies dividends<br \/>  that are at particularly high risk for errors in<br \/>  general and also for relatively large errors:<\/p>\n<p>  dividend = intdividend + deltadividend<br \/>   or<br \/>   dividend = intdividend \u2014 deltadividend<br \/>   divisor = intdivisor \u2014 deltadivisor<br \/>   intdivisor = 3, 9, 15, 21, 27<\/p>\n<p>  and one of the following must hold true, which one depends<br \/>  on the exponent in the IEEE representation of the<br \/>  dividend in question:<\/p>\n<p>  intdividend = intdivisor\/3 mod intdivisor<br \/>   intdividend = 2*intdivisor\/3 mod intdivisor<\/p>\n<p>  The restrictions on the above deltadividend and deltadivisor<br \/>  are somewhat complex, the details of which are left as<br \/>  an exercise for the reader. \ud83d\ude09 I have not worked out<br \/>  the restrictions in detail.<\/p>\n<p>  Here are the previous posts to comp.sys.intel. Read and<br \/>  enjoy.<\/p>\n<p>  -Tim Coe coe@vitsemi.com<\/p>\n<p>   \u2014 First and Second Post text \u2014 On a Packard Bell P90 PC I performed the following<br \/>  calculation using Microsoft Windows Desk Calculator:<\/p>\n<p>  (4195835 \/ 3145727) * 3145727 [typo corrected from earlier posts]<\/p>\n<p>  The result was 4195579.<br \/>  This represents an error of 256 or one part in ~16000.<\/p>\n<p>  ak@ananke.s.bawue.de (Andreas Kaiser) writes<br \/>  &gt;Usually, the division is correct (what did you expect?). Just a few<br \/>  &gt;operands are divided wrong. My results (P90) with ~25.000.000.000<br \/>  &gt;random arguments (within 1..2^46), with even results divided by two<br \/>  &gt;until odd, to assure unique mantissa patterns (the binary exponent<br \/>  &gt;doesn&#8217;t care, of course).<br \/>  &gt;<br \/>  &gt; 3221224323<br \/>  &gt; 12884897291<br \/>  &gt; 206158356633<br \/>  &gt; 824633702441<br \/>  &gt; 1443107810341<br \/>  &gt; 6597069619549<br \/>  &gt; 9895574626641<br \/>  &gt; 13194134824767<br \/>  &gt; 13194134826115<br \/>  &gt; 13194134827143<br \/>  &gt; 13194134827457<br \/>  &gt; 13194138356107<br \/>  &gt; 13194139238995<br \/>  &gt; 26388269649885<br \/>  &gt; 26388269650425<br \/>  &gt; 26388269651561<br \/>  &gt; 26388276711601<br \/>  &gt; 26388276712811<br \/>  &gt; 52776539295213<br \/>  &gt; 52776539301125<br \/>  &gt; 52776539301653<br \/>  &gt; 52776539307823<br \/>  &gt; 52776553426399<br \/>  &gt;<br \/>  &gt; Gruss, Andreas<br \/>  &gt; <br \/>  &gt;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;<br \/>  &gt;&#8212; Andreas Kaiser \u2014 internet: ak@ananke.s.bawue.de<br \/>  &gt;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212; fidonet: 2:246\/8506.9<\/p>\n<p>  Analysis of these numbers reveals that all but 2 of them are of<br \/>  the form:<\/p>\n<p>  3*(2^(K+30)) \u2014 1149*(2^(K-(2*J))) \u2014 delta*(2^(K-(2*J)))<\/p>\n<p>  where J and K are integers greater than or equal to 0,<br \/>  and delta is a real number that has varying ranges depending<br \/>  on J but can generally be considered to be between 0 and 1.<\/p>\n<p>  The 2*J terms in the above equation leads to the conclusion<br \/>  that the Pentium divider is an iterative divider that computes<br \/>  2 bits of quotient per cycle. (This is in agreemnent with<br \/>  the quoted 39 cycles per extended long division from the<br \/>  Pentium data book. The technical name for this type of<br \/>  divider is radix 4)<\/p>\n<p>  The extremely low probability of error (1 in 10^10) implies<br \/>  that the remainder is being held in carry save format. (Carry<br \/>  save format is where a number is represented as the sum of<br \/>  two numbers. This format allows next remainder calculation<br \/>  to occur without propagating carries. The reason that carry<br \/>  save format is implied by the error probability is that<br \/>  it is very difficult but not impossible to build up long<br \/>  coincident sequences of ones in both the sum word and the<br \/>  carry word.)<\/p>\n<p>  I assumed the digit set was -2, -1, 0, 1, and 2. (Having<br \/>  5 possible digits in a radix 4 divider allows a necessarry<br \/>  margin for error in next digit selection. When doing long<br \/>  division by hand the radix 10 and 10 possible digits allow<br \/>  no margin for error.)<\/p>\n<p>  Taking the above into consideration I wrote the tentative<br \/>  model of Pentium divide hardware included below so that I<br \/>  might watch what bit patterns developed in the remainder.<br \/>  After running the numbers that were known to fail and numbers<br \/>  near them that appeared not to fail I determined the<br \/>  conditions for failure listed in the program.<\/p>\n<p>  Analysis of the precise erroneous results returned on the<br \/>  bad divides indicates that a bit (or bits) is being subtracted<br \/>  from the remainder at or near its most significant bit.<br \/>  A modeling of this process is included in the program.<\/p>\n<p>  The program accurately explains all the published<br \/>  errors and accurately predicted the error listed at the<br \/>  beginning of the article.<\/p>\n<p>  The determination of the quotient from the sequence of digits<br \/>  is left as an exercise for the reader ;-).<\/p>\n<p>  I would like to thank Dr. Nicely for providing this window<br \/>  into the Pentium architecture.<\/p>\n<p>   \u2014 Third Post \u2014 Since then I performed the following calculations in Microsoft<br \/>  Windows Desk Calculator on a Pentium machine with the following<br \/>  results:<\/p>\n<p>  (41.999999\/35.9999999)*35.9999999 \u2014 41.999999 ==&gt; (-0.75)*(2^-13)<br \/>  (48.999999\/41.9999999)*41.9999999 \u2014 48.999999 ==&gt; (-1.0)*(2^-13)<br \/>  (55.999999\/47.9999999)*47.9999999 \u2014 55.999999 ==&gt; (-1.0)*(2^-13)<br \/>  (62.999999\/53.9999999)*53.9999999 \u2014 62.999999 ==&gt; (-1.0)*(2^-13)<br \/>  (54.999999\/59.9999999)*59.9999999 \u2014 54.999999 ==&gt; (-1.0)*(2^-13)<br \/>  (5244795\/3932159)*3932159 \u2014 5244795 ==&gt; (-1.0)*(2^8)<\/p>\n<p>  I chose these calculations in anticipation of them exposing further<br \/>  Pentium FDIV failure modes. They did. The size of the erroneous results<br \/>  are exactly consistant with the final version of tentive Pentium<br \/>  divider model included below and in no way can be attributed to<br \/>  a Desk Calculator bug. The existance of these results pins<br \/>  most of the digit selection thresholds included in the model.<\/p>\n<p>  I also performed the following calculations that did NOT produce erroneous<br \/>  results:<\/p>\n<p>  (38.499999\/32.9999999)*32.9999999 \u2014 38.499999 ==&gt; 0<br \/>  (45.499999\/38.9999999)*38.9999999 \u2014 45.499999 ==&gt; 0<\/p>\n<p>  I have been following this thread with great interest. One misperception<br \/>  that needs clearing is that this is an extended precision problem. This<br \/>  bug hits between 50 and 2000 single precision dividend divisor pairs (out<br \/>  of a total of 64 trillion.) Another misperception is related to the magnitude<br \/>  of the relative error. I would propose the following table of probabilities<br \/>  of getting the following relative errors when performing random double<br \/>  extended precision divides:<\/p>\n<p>  relerror = (correct_result \u2014 Pentium_result)\/correct_result<\/p>\n<p>  Error Range | Probability<br \/>   \u2014 1e-4 &lt; relerror | 0<br \/>  1e-5 &lt; relerror &lt; 1e-4 | 0.3e-11<br \/>  1e-6 &lt; relerror &lt; 1e-5 | 0.6e-11<br \/>  1e-7 &lt; relerror &lt; 1e-6 | 0.6e-11<br \/>  1e-8 &lt; relerror &lt; 1e-7 | 0.6e-11<br \/>  .<br \/>  .<br \/>  1e-18 &lt; relerror &lt; 1e-17 | 0.6e-11<br \/>  1e-19 &lt; relerror &lt; 1e-18 | 0.6e-11<\/p>\n<p>  Examination of the above divide failures reveals that both the dividend<br \/>  and divisor are integers minus small deltas. Also notable is the induced<br \/>  error is roughly delta^(2\/3). The integers in the divisors are actually<br \/>  restricted to those listed and their binary scalings. The integers in<br \/>  the dividends may be much more freely chosen. This type of dividend<br \/>  divisor pair actually occurs quite often when forward integrating<br \/>  trajectories off metastable points. This is because metastable points<br \/>  in systems often have certain exactly integral characteristics and as<br \/>  a path diverges from the metastable point these characteristics slowly diverge<br \/>  from their integral values. If the forward integration algorithm<br \/>  happens to divide these characteristics, and they happen to be for<br \/>  example 7 and 3, it will get nailed.<\/p>\n<p>  The divider model includes support for up to 60 bits of divisor and<br \/>  up to 64 bits of dividend. The last four bits of dividend are kludged<br \/>  in.<\/p>\n<p>  Here is a list of failing dividend divisor mantissas in hex. A dash<br \/>  between two numbers indicates an inclusive failing range. Compile<br \/>  the program and run these numbers through it and watch the bits dance:<\/p>\n<p>  800bf6 bffffc<br \/>  a00ef6 effffc<\/p>\n<p>  a808d2 8fffe<br \/>  e00bd2 bfffe<\/p>\n<p>  a7ffd2 8fffe<br \/>  c3ffd2 a7ffe<br \/>  dfffd2 bfffe<br \/>  fbffd2 d7ffe<\/p>\n<p>  f9ffdc7 efffe<\/p>\n<p>  b9feab7-b9feabf 8fff<br \/>  b9ffab0e-b9ffab7f 8fffc<\/p>\n<p>  -the following double extended pair fails 3 times!!!<br \/>  c3ffd2eb0d2eb0d2 a7ffe<br \/>  e00bd229315 bfffe<\/p>\n<p>  9fffef5-9fffeff effff4<br \/>  9ffff21-9ffff3f effff8<br \/>  9ffff4d-9ffff7f effffc<\/p>\n<p>  f008e35-f008e3f 8ffff4<br \/>  f008e6d-f008e7f 8ffff6<br \/>  f008ea1-f008ebf 8ffff8<br \/>  f008ed9-f008eff 8ffffa<br \/>  f008f0d-f008f3f 8ffffc<br \/>  f008f45-f008f7f 8ffffe<br \/>  f008f7e 8ffffff1<br \/>  f0023e 8fffff8<\/p>\n<p>  effff0d 8ffffc<\/p>\n<p>  a808d1b-a808d3f 8fffe<br \/>  a808d67-a808d7f 8fffe4<br \/>  a808db3-a808dbf 8fffe8<br \/>  a808dff 8fffec<\/p>\n<p>  An example run of the program (using the first reported<br \/>  error):<\/p>\n<p>  &#8212;Enter dividend mantissa in hex: 8 <br \/>  &#8212;Enter divisor mantissa in hex: bfffffb829 <br \/>  &#8212;next digit 1<br \/>  &#8212;1111000000000000000000000001000111110101101111111111111111111100<br \/>  &#8212;0000000000000000000000000000000000000000000000000000000000000100<br \/>  &#8212;11110000000000000000000000010001 iteration number 1<br \/>  &#8212;.<br \/>  &#8212;.<br \/>  &#8212;.<br \/>  &#8212;next digit -1<br \/>  &#8212;0011111111100100101011110100110000010111010000000000000000000000<br \/>  &#8212;1101111111111111111110110110010010010000000000000000000000000000<br \/>  &#8212;00011111111001001010101010110000 iteration number 14<br \/>  &#8212;next digit 2<br \/>  &#8212;A bug condition has been detected.<br \/>  &#8212;Enter 0 for correct result or 1 for incorrect result: 1 <br \/>  &#8212;0000000001101101010100001000000111110110011111111111111111111100<br \/>  &#8212;1111111100100101010110100110010010010010000000000000000000000100<br \/>  &#8212;11111111100100101010101011100101 iteration number 15<br \/>  &#8212;next digit 0<br \/>  &#8212;1111110100100000001010111001010110010001111111111111111111100000<br \/>  &#8212;0000000100101010100000000000010010010000000000000000000000100000<br \/>  &#8212;11111110010010101010101110011001 iteration number 16<br \/>  &#8212;.<br \/>  &#8212;.<br \/>  &#8212;.<\/p>\n<p>  -Tim Coe coe@vitsemi.com  <\/div>\n<\/div>\n<p>  <\/p>\n<div class=\"spoiler\"><b class=\"spoiler_title\">\u043f\u0440\u043e\u0433\u0430 \u043d\u0430 \u0421<\/b><\/p>\n<div class=\"spoiler_text\">\n<pre><code class=\"cpp\">#include   main() { unsigned r0, r1, r2, r3, r4, r5, r6, s0, s1; unsigned t0, t1, t2, t3, cycle, f, incorrect, spup; unsigned thr_m2_m1, thr_m1_0, thr_0_1, thr_1_2, positive, errornum; char line[30], *linepoint;  r0 = 0x0bffffc0; r1 = 0; r2 = 0x0800bf60; r3 = 0; printf(&quot;First digit of mantissas must be between 8 and f\\n&quot;); printf(&quot;Enter dividend mantissa in hex: &quot;); *(line+15) = '0'; scanf(&quot;%s&quot;, line); linepoint = line; while (*linepoint != '\\0') linepoint++; while (linepoint &lt; line + 15) *linepoint++ = '0'; *(line+16) = '\\0'; sscanf(line+15, &quot;%x&quot;, &spup); spup = (spup &gt;&gt; 2) | (12 & (spup &lt;&lt; 2)); *(line+15) = '\\0'; sscanf(line+7, &quot;%x&quot;, &r3); *(line+7) = '\\0'; sscanf(line, &quot;%x&quot;, &r2); printf(&quot;Enter divisor  mantissa in hex: &quot;); scanf(&quot;%s&quot;, line); linepoint = line; while (*linepoint != '\\0') linepoint++; while (linepoint &lt; line + 15) *linepoint++ = '0'; *(line+15) = '\\0'; sscanf(line+7, &quot;%x&quot;, &r1); *(line+7) = '\\0'; sscanf(line, &quot;%x&quot;, &r0); r4 = 0; r5 = 0;  t0 = r2; while (!(t0 & 1)) t0 = t0 &gt;&gt; 1; printf(&quot;%d\\n&quot;, t0); t0 = r0; while (!(t0 & 1)) t0 = t0 &gt;&gt; 1; printf(&quot;%d\\n&quot;, t0);      \/*  These thresholds are VERY tentative. *\/     \/*  There may be bugs in them.           *\/ t0 = r0 &gt;&gt; 22;     \/*  Next threshold is strongly indicated *\/     \/*  by the failure of 1\/9895574626641    *\/ if (t0 &lt; 36) thr_0_1 = 3;     \/*  Next threshold is strongly indicated *\/     \/*  by the failure of 1\/824633702441     *\/ else if (t0 &lt; 48) thr_0_1 = 4;     \/*  Next threshold is strongly indicated *\/     \/*  by the failure of 5244795\/3932159    *\/ else if (t0 &lt; 60) thr_0_1 = 5; else thr_0_1 = 6; thr_m1_0 = 254 - thr_0_1; if (t0 &lt; 33) thr_1_2 = 11; else if (t0 &lt; 34) {   printf(&quot;This model does not correctly handle\\n&quot;);   printf(&quot;this divisor.  The Pentium divider\\n&quot;);   printf(&quot;undoubtly handles this divisor correctly\\n&quot;);   printf(&quot;by some means that I have no evidence\\n&quot;);   printf(&quot;upon which speculate.\\n&quot;);   exit();   }     \/*  Next threshold is strongly indicated     *\/     \/*  by the failure of 41.999999\/35.9999999   *\/ else if (t0 &lt; 36) thr_1_2 = 12; else if (t0 &lt; 39) thr_1_2 = 13;     \/*  Next threshold is strongly indicated     *\/     \/*  by the failure of 1\/1443107810341 and    *\/     \/*  by the failure of 48.999999\/41.9999999   *\/ else if (t0 &lt; 42) thr_1_2 = 14; else if (t0 &lt; 44) thr_1_2 = 15;     \/*  Next threshold is strongly indicated     *\/     \/*  by the failure of 55.999999\/47.9999999   *\/ else if (t0 &lt; 48) thr_1_2 = 16;     \/*  Next threshold is strongly indicated     *\/     \/*  by the failure of 62.999999\/53.9999999   *\/ else if (t0 &lt; 54) thr_1_2 = 18;     \/*  Next threshold is strongly indicated     *\/     \/*  by the failure of 54.999999\/59.9999999   *\/ else if (t0 &lt; 60) thr_1_2 = 20; else thr_1_2 = 23; thr_m2_m1 = 254 - thr_1_2;  if (t0 == 35) errornum = 22; else if (t0 == 41) errornum = 26; else if (t0 == 47) errornum = 30; else if (t0 == 53) errornum = 34; else if (t0 == 59) errornum = 38; else errornum = 128;  incorrect = 0; cycle = 1;     \/*  The cycle limit would be ~34 instead of  *\/     \/*  18 for double extended precision.        *\/ while (cycle &lt; 18) {   t0 = 255 & ((r2 &gt;&gt; 24) + (r4 &gt;&gt; 24));   if ((t0 &gt; thr_m1_0) || (t0 &lt; thr_0_1)) {     s0 = 0;     s1 = 0;     positive = 0;     printf(&quot;next digit 0\\n&quot;);     }   else if (t0 &gt; thr_m2_m1) {     s0 = r0;     s1 = r1;     positive = 0;     printf(&quot;next digit -1\\n&quot;);     }   else if (t0 &lt; thr_1_2) {     s0 = ~r0;     s1 = ~r1;     positive = 4;     printf(&quot;next digit 1\\n&quot;);     }   else if (t0 & 128) {     s0 = (r0 &lt;&lt; 1) | (r1 &gt;&gt; 31);     s1 = r1 &lt;&lt; 1;     positive = 0;     printf(&quot;next digit -2\\n&quot;);     }   else {     s0 = ~((r0 &lt;&lt; 1) | (r1 &gt;&gt; 31));     s1 = ~(r1 &lt;&lt; 1);     positive = 4;     printf(&quot;next digit 2\\n&quot;);     if ((t0 == errornum) && (((r2 &gt;&gt; 21) & 7) == 7) && (((r4 &gt;&gt; 21) & 7) == 7)) {       printf(&quot;A bug condition has been detected.\\n&quot;);       printf(&quot;Enter 0 for correct result or 1 for incorrect result: &quot;);       scanf(&quot;%d&quot;, &incorrect);       if (incorrect) {             \/* These amounts that are subtracted from the    *\/             \/* remainder have NOT been extensively verified. *\/         if (errornum == 22) s0 = s0 - (3 &lt;&lt; 25);         else s0 = s0 - (4 &lt;&lt; 25);         }       }     }    t0 = s0 ^ r2 ^ r4;   t1 = s1 ^ r3 ^ r5;   t2 = (s0 & r2) | (s0 & r4) | (r2 & r4);   t3 = (s1 & r3) | (s1 & r5) | (r3 & r5);   r2 = (t0 &lt;&lt; 2) | (t1 &gt;&gt; 30);   r3 = t1 &lt;&lt; 2;   r4 = (t2 &lt;&lt; 3) | (t3 &gt;&gt; 29);   r5 = (t3 &lt;&lt; 3) | positive | (spup & 3);   spup = spup &gt;&gt; 2;    t0 = r2;   f = 32;   while (f--) {     if (t0 & (1 &lt;&lt; 31)) putchar('1');     else putchar('0');     t0 = t0 &lt;&lt; 1;     }   t0 = r3;   f = 32;   while (f--) {     if (t0 & (1 &lt;&lt; 31)) putchar('1');     else putchar('0');     t0 = t0 &lt;&lt; 1;     }   putchar('\\n');   t0 = r4;   f = 32;   while (f--) {     if (t0 & (1 &lt;&lt; 31)) putchar('1');     else putchar('0');     t0 = t0 &lt;&lt; 1;     }   t0 = r5;   f = 32;   while (f--) {     if (t0 & (1 &lt;&lt; 31)) putchar('1');     else putchar('0');     t0 = t0 &lt;&lt; 1;     }   putchar('\\n');   t0 = r2 + r4;   f = 32;   while (f--) {     if (t0 & (1 &lt;&lt; 31)) putchar('1');     else putchar('0');     t0 = t0 &lt;&lt; 1;     }   printf(&quot; iteration number %d\\n&quot;, cycle++);    } } <\/code><\/pre>\n<\/p><\/div>\n<\/div>\n<h2>\u0412\u043e\u044d\u043d \u041f\u0440\u0430\u0442\u0442 (<a href=\"https:\/\/en.wikipedia.org\/wiki\/Vaughan_Pratt\">Vaughan R. Pratt<\/a>)<\/h2>\n<p>  <\/p>\n<div style=\"text-align:center;\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/post_images\/4a2\/0a1\/b00\/4a20a1b007eb509390bece13b11f9ffb.jpg\" alt=\"image\" \/><\/div>\n<p>  <b>2.9991523619 \u0434\u0435\u043a\u0430\u0431\u0440\u044f<\/b> 1994 \u0433\u043e\u0434\u0430<a href=\"https:\/\/en.wikipedia.org\/wiki\/Vaughan_Pratt\"> \u0412\u043e\u044d\u043d \u041f\u0440\u0430\u0442\u0442 (Vaughan R. Pratt)<\/a> \u0438\u0437 \u0421\u0442\u044d\u043d\u0434\u0444\u043e\u0440\u0434\u0441\u043a\u043e\u0433\u043e \u0443\u043d\u0438\u0432\u0435\u0440\u0441\u0438\u0442\u0435\u0442\u0430 \u043e\u043f\u0443\u0431\u043b\u0438\u043a\u043e\u0432\u0430\u043b \u043f\u0438\u0441\u044c\u043c\u043e \u0432 \u0433\u0440\u0443\u043f\u043f\u0430\u0445 \u043d\u043e\u0432\u043e\u0441\u0442\u0435\u0439 comp.arch \u0438 comp.sys.intel, \u0432 \u043a\u043e\u0442\u043e\u0440\u043e\u043c \u043e\u0441\u043f\u0430\u0440\u0438\u0432\u0430\u043b \u0442\u043e\u0447\u043a\u0443 \u0437\u0440\u0435\u043d\u0438\u044f Intel \u043e \u0442\u043e\u043c, \u0447\u0442\u043e \u0432\u0435\u0440\u043e\u044f\u0442\u043d\u043e\u0441\u0442\u044c \u0432\u0441\u0442\u0440\u0435\u0447\u0438 \u0441 \u043e\u0448\u0438\u0431\u043a\u043e\u0439 \u0441\u043e\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u0442 \u00ab\u043e\u0434\u0438\u043d \u0440\u0430\u0437 \u0432 27 000 \u043b\u0435\u0442\u00bb. \u041e\u043d \u0441\u043c\u043e\u0433 \u043f\u0440\u043e\u0434\u0435\u043c\u043e\u043d\u0441\u0442\u0440\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u044c \u0430\u043a\u0442\u0438\u0432\u0430\u0446\u0438\u0438 \u043e\u0448\u0438\u0431\u043a\u0438 \u043e\u0434\u0438\u043d \u0440\u0430\u0437 \u0432 \u043a\u0430\u0436\u0434\u044b\u0435 3 \u043c\u0438\u043b\u043b\u0438\u0441\u0435\u043a\u0443\u043d\u0434\u044b \u0432 \u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e \u043f\u0440\u0430\u0432\u0434\u043e\u043f\u043e\u0434\u043e\u0431\u043d\u043e\u043c \u0441\u0446\u0435\u043d\u0430\u0440\u0438\u0438. \u0410 \u0442\u0430\u043a\u0436\u0435 \u043e\u043d \u043f\u0440\u043e\u0434\u0435\u043c\u043e\u043d\u0441\u0442\u0440\u0438\u0440\u043e\u0432\u0430\u043b, \u0447\u0442\u043e \u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e \u0431\u0435\u0437\u043e\u0431\u0438\u0434\u043d\u043e \u0432\u044b\u0433\u043b\u044f\u0434\u044f\u0449\u0435\u0435 \u0434\u0435\u043b\u0435\u043d\u0438\u0435 4,999999\/14,999999 \u043f\u0440\u0438\u0432\u043e\u0434\u0438\u043b\u043e \u043a \u043e\u0442\u043a\u043b\u043e\u043d\u0435\u043d\u0438\u044e \u043e\u0442 \u043f\u0440\u0430\u0432\u0438\u043b\u044c\u043d\u043e\u0433\u043e \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u0430 \u043d\u0430 0,00000407 \u043f\u0440\u0438 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0438 \u0434\u0435\u0444\u0435\u043a\u0442\u043d\u043e\u0433\u043e \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u043e\u0440\u0430.<\/p>\n<blockquote><p>\u00ab\u042d\u0442\u0430 \u043e\u0448\u0438\u0431\u043a\u0430 \u043d\u0430\u0438\u0431\u043e\u043b\u0435\u0435 \u043a\u043e\u0432\u0430\u0440\u043d\u0430: \u043e\u043d\u0430 \u043f\u043e\u0447\u0442\u0438 \u0441\u0442\u043e\u043b\u044c \u0436\u0435 \u043a\u043e\u0432\u0430\u0440\u043d\u0430, \u043a\u0430\u043a \u0435\u0441\u043b\u0438 \u0431\u044b \u0432\u043e\u0432\u0441\u0435 \u043d\u0435 \u0432\u044b\u0437\u044b\u0432\u0430\u043b\u0430 \u0442\u0440\u0435\u0432\u043e\u0433\u0438 \u0443 \u043b\u044e\u0434\u0435\u0439 \u043f\u0440\u0438 \u043f\u0440\u043e\u0441\u043c\u043e\u0442\u0440\u0435 \u0438\u043c\u0438 \u043a\u043e\u043b\u043e\u043d\u043e\u043a \u0441\u0432\u043e\u0438\u0445 \u0434\u0430\u043d\u043d\u044b\u0445. \u0422\u0430\u043a\u0438\u043c \u043e\u0431\u0440\u0430\u0437\u043e\u043c, \u043a\u0440\u043e\u0448\u0435\u0447\u043d\u044b\u0435 \u043e\u0448\u0438\u0431\u043a\u0438 \u0432 \u043e\u0434\u043d\u0443 \u0441\u0442\u043e\u0442\u044b\u0441\u044f\u0447\u043d\u0443\u044e \u043c\u043e\u0433\u0443\u0442 \u0432 \u0442\u0435\u0447\u0435\u043d\u0438\u0435 \u0434\u043e\u043b\u0433\u043e\u0433\u043e \u0432\u0440\u0435\u043c\u0435\u043d\u0438 \u043f\u0440\u043e\u043d\u0438\u043a\u0430\u0442\u044c \u0432 \u0442\u0440\u0438\u043b\u043b\u0438\u043e\u043d\u044b \u0432\u044b\u0447\u0438\u0441\u043b\u0435\u043d\u0438\u0439, \u0441\u043e\u0432\u0435\u0440\u0448\u0430\u0435\u043c\u044b\u0445 \u043f\u043e \u0432\u0441\u0435\u043c\u0443 \u043c\u0438\u0440\u0443, \u0438 \u043f\u0440\u0430\u043a\u0442\u0438\u0447\u0435\u0441\u043a\u0438 \u043d\u0435\u0442 \u0441\u043f\u043e\u0441\u043e\u0431\u0430 \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0438\u0442\u044c \u0438\u0445, \u043a\u0440\u043e\u043c\u0435 \u043a\u0430\u043a \u043e\u0441\u0443\u0449\u0435\u0441\u0442\u0432\u043b\u044f\u044f \u043c\u0430\u0441\u0441\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u0443\u044e \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0443 \u043d\u0430 \u043e\u0448\u0438\u0431\u043a\u0443 \u0432 FPU, \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u0441\u043e\u0432\u0435\u0440\u0448\u0435\u043d\u043d\u043e \u043d\u0435 \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e\u0439 \u0434\u043b\u044f \u043d\u0430\u0434\u0435\u0436\u043d\u043e \u0440\u0430\u0431\u043e\u0442\u0430\u044e\u0449\u0435\u0433\u043e \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u043e\u0440\u0430.\u00bb<\/p><\/blockquote>\n<div class=\"spoiler\"><b class=\"spoiler_title\">\u041e\u0440\u0438\u0433\u0438\u043d\u0430\u043b \u043f\u0438\u0441\u044c\u043c\u0430 \u0412\u043e\u044d\u043d\u0430 \u041f\u0440\u0430\u0442\u0442\u0430<\/b><\/p>\n<div class=\"spoiler_text\">From: pratt@Sunburn.Stanford.EDU (Vaughan R. Pratt)<br \/>  Newsgroups: comp.arch,comp.sys.intel<br \/>  Subject: A natural scenario with high FDIV bug probability (was: In Intel&#8217;s Defense&#8230;)<br \/>  Date: 3 Dec 1994 15:20:17 GMT<br \/>  Organization: Computer Science Department, Stanford University.<br \/>  Lines: 194<br \/>  Message-ID: &lt;3bq2bh$ohc@Radon.Stanford.EDU&gt;<br \/>  References: &lt;3bdieq$lqf@engnews2.Eng.Sun.COM&gt; &lt;3bf666$6k4@hpsystem1.informatik.tu-muenchen.de&gt; &lt;3bnrgo$4gf@hermes.synopsys.com&gt;<br \/>  NNTP-Posting-Host: sunburn.stanford.edu<br \/>  Xref: Radon.Stanford.EDU comp.arch:15209 comp.sys.intel:20065<br \/>  In this message I give a scenario in which FDIV bugs are encountered once every three milliseconds or so, in contrast to Intel&#8217;s default scenario in which they are encountered every 27.000 years or so. Furthermore none of the encountered bugs involve obscure numbers: all of them take the form of small \u00abbruised\u00bb rationals like 5\/15, which when bruised as 4.999999\/14.999999 yields 0.333329 on the Pentium and 0.33333329 elsewhere. Moreover quite a few of the errors encountered are very large, as with this example. We leave the plausibility of our scenario for the reader to judge; my intent is that it come across as something that could well happen.<\/p>\n<p>  By way of motivation: In article &lt;3bnrgo$4gf@hermes.synopsys.com&gt;, Joe Buck wrote:<\/p>\n<p>  &gt;I am really quite amazed at all of this fuss. In one case out of nine<br \/>  &gt;billion, you get what in essence is a single-precision division instead of<br \/>  &gt;a double-precision division. The vast majority of Pentium users never do<br \/>  &gt;anything that requires even full single-precision: they run spreadsheets,<br \/>  &gt;write documents, and play games. Why should Intel pay about 1 billion<br \/>  &gt;(that&#8217;s nine zeros) dollars to get all these lusers a new chip?<br \/>  One in nine billion, NOT. It is a common fallacy that real numbers arising in a user&#8217;s program are uniformly distributed. Their actual distribution depends critically on both where the program gets its data and what it does with it, as with the scenario described below.<\/p>\n<p>  Correct to within single-precision, NOT. Unless of course you had in mind a 16-bit word length; other examples of ~16-bit errors have already been given, but the form of the ones we give here such as the above-cited 4.999999\/14.999999 makes them particularly dramatic.<\/p>\n<p>  In this message I give a simple and plausible scenario, not involving number theory, cryptography, differential equations, or matrix inversions, but simply divisions by integers of one to three digits, represented as reals, that have been slightly \u00abbruised\u00bb by a process all of us have seen many times. In this scenario the FDIV bug reveals itself, not once every 27,000 years, but rather once every three milliseconds or so, the rate at which my Pentium was encountering them.<\/p>\n<p>  The critical postulate here is that the integers encountered in this scenario have been \u00abbruised\u00bb very slightly due to other processing and then truncated, for whatever reason (e.g. the numbers might have been obtained automatically from a decimal calculator), to some preordained number of decimal digits, the *precision*. All integers are subjected uniformly to this treatment, for a fixed precision. Thus if the precision is say 6, and we are dividing say 7 by 18, then 7 is actually 6.999999 and 18 is 17.999999, that is, the same quantity, here 10^-6, is subtracted from both operands.<\/p>\n<p>  There are a million pairs of integers i,j with 1 &lt;= i,j &lt;= 1000. The following table shows, as a function of the decimal precision going down, and the *tolerance* (how far off a division must be to count as a wrong answer) going across, how many of the one million possible divisions i\/j are wrong. For these quotients the IEEE-correct answers can be expected to have a relative error of better than 10^-17. The table below defines \u00abwrong\u00bb as having a relative error of at least 10^-15 for the first column, at least 10^-13 for the second, etc. (That is, going across the table we become less fussy and hence recognize fewer quotients as wrong.)<\/p>\n<p>  <img decoding=\"async\" src=\"https:\/\/habrastorage.org\/files\/d0c\/c64\/7dd\/d0cc647dd0ca4b3ba59882c06f27a333.jpg\"\/><\/p>\n<p>  With 6 digits of precision the truncation error is one millionth, an easily remembered quantity. For this case, the reader may wish to memorize two or three of the worst offenders, if only for production at cocktail parties.<\/p>\n<p>  My favorite is 5\/15, that is, 4.999999\/14.999999, appraised by the Pentium at 0.33332922 when other appraisers would insist on 0.33333329 as a fairer answer.<\/p>\n<p>  Another bad case is 7\/48 (6.999999\/47.999999), for which the Pentium guesses 0.14583204 when a more inspired guess would be 0.14583332.<\/p>\n<p>  One more candidate: 9\/54 (8.999999\/53.999999), where the Pentium gambles on 0.16666439 and loses petulantly to 0.16666665.<\/p>\n<p>  Let me emphasize the three essential features of examples such as these. First, the basic arithmetic is with quite small integers (albeit slightly \u00abbruised\u00bb), greatly increasing the likelihood that you will encounter these exact errors, whether or not you ever notice them. Second, the bruising can be by any simple amount, like a millionth or a ten-millionth, it does not have to be an obscure quantity like 0.000000142883, greatly increasing the likelihood that the kind of bruising arising in your situation will be bad for you. Third, the error can be applied uniformly to both operands of FDIV, one does not need to tweak the errors of the operands separately, giving you an even better chance of encountering one of these errors.<\/p>\n<p>  An odd feature of these three examples that for want of time I have not pursued and that may or may not have a uniform explanation is that in every case the error can be described approximately by saying that the Pentium omitted two of the repeating digits, underlined with ^^ in the above. This yields a simple heuristic for emulating a Pentium on these three examples: calculate 4.999999\/14.999999 or whatever on your pocket calculator, then delete two of the repeating digits; the result is good to one digit beyond the repeating string (actually two in the 5\/15 case).<\/p>\n<p>  It should be noted that the relative error in these three examples is considerably greater than the precision.<\/p>\n<p>  Only 26 pairs survive at tolerance 10^-5. Here for the record are the 14 wrong&#8217;uns for precision 6: 5\/15, 5\/30, 5\/60, 5\/120, 9\/54, 9\/108, 9\/216, 9\/432, 9\/864, 10\/60, 10\/120, 10\/240, 10\/480, and 10\/960. (7\/48 is off by only 0.9*10^-5, just barely missing out on tolerance 10^-5.) For precision 5 the 10 bad guys are 18\/27, 20\/30, 33\/144, 36\/108, 40\/120, 44\/192, 72\/432, 72\/864, 80\/480, and 80\/960. And for precision 4 the two divisions are 82\/96 and 120\/288; specifically, 81.9999\/95.9999 yields 0.854156 when we expected 0.8541665, while 119.9999\/287.9999 yields 0.416656 and we wanted 0.4166665. (Hmm, the delete-two-repeats rule works here too; very interesting&#8230;)<\/p>\n<p>  Although we have been assuming radix ten for our notion of precision, it is not special, and any other radix should yield similar results, albeit with some other assortment of small rational erring divisions. In particular if we had evolved thirteen fingers instead of ten, the corresponding table going from 11 digits down to 3 digits at tolerance 10^-9 would have been 0, 31, 211, 547, 802, 784, 417, 109, 0.<\/p>\n<p>  While this scenario puts the FDIV bug in what looks at least to me like a pretty bad light, I do not claim it is anything like the worst case scenario. The two essential factors for any scenario are the rate at which that scenario triggers the FDIV bug, and how often the essence of that scenario arises in the real world. The \u00abdamage index\u00bb of a scenario is the product of those two factors. A scenario that accounts for thousands of hours of actual Pentium time but that only triggers the bug say every ten minutes may well have a higher damage index than my scenario above, whose strength is that it triggers the bug every few milliseconds but whose weakness is the uncertainty as to how likely it really is in practice. You must admit however that it is not a completely implausible scenario.<\/p>\n<p>  -o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o<\/p>\n<p>  I append here the code that prints the above table. For those who think if not harmonize in C, this is where to look for the exact meanings of \u00abprecision\u00bb and \u00abtolerance\u00bb.<\/p>\n<pre><code class=\"cpp\">#include  #include   main(argc, argv) \tchar *argv[]; { \tint i, j, cnt, digits; \tdouble prec, tol, ibruis, jbruis, pent, true; \tfor (digits = 15, prec = 1e-15; digits &gt; 2; digits--, prec *= 10) { \t\tprintf(&quot;%4.d\\t\\t&quot;, digits); \t\tfor (tol = 1e-15; tol &lt; 1e-4; tol *= 100) { \t\t\tcnt = 0; \t\t\tfor (i = 1; i &lt;= 1000; i++) \t\t\t\tfor (j = 1; j &lt;= 1000; j++) { \t\t\t\t\tibruis = i - prec, jbruis = j - prec; \t\t\t\t\tpent = ibruis\/jbruis; \t\t\t\t\ttrue = (1.11*ibruis)\/(1.11*jbruis); \t\t\t\t\tcnt += (fabs(pent - true) &gt; tol*true); \t\t\t\t} \t\t\tprintf(&quot;%4d  &quot;, cnt); \t\t} \t\tprintf(&quot;\\n&quot;); \t} } <\/code><\/pre>\n<p>  My heuristic for getting the true quotient, namely true = (1.11*ibruis)\/(1.11*jbruis), is the quick and dirty one of randomizing the operands just enough to move the probabilities of hitting the FDIV bug at least somewhat closer to Intel&#8217;s estimate of once in 27,000 years. When I replaced 1.11 by 1.01 the results were identical, which along with the Intel estimate seemed good enough for a program not intended for building planes.<\/p>\n<p>  Vaughan Pratt<\/p>\n<p>  [<a href=\"http:\/\/boole.stanford.edu\/bug1.html\">\u0438\u0441\u0442\u043e\u0447\u043d\u0438\u043a<\/a>]  <\/div>\n<\/div>\n<p>  <b>11.9999103517 \u0434\u0435\u043a\u0430\u0431\u0440\u044f<\/b> 1994 \u0433\u043e\u0434\u0430 IBM \u0432\u044b\u043f\u0443\u0441\u0442\u0438\u043b\u0430 \u00abPentium Study, IBM Memo\u00bb \u0433\u0434\u0435 \u043f\u043e\u0434\u0432\u0435\u0440\u0433\u043b\u0430 \u0441\u043e\u043c\u043d\u0435\u043d\u0438\u044e \u0437\u0430\u044f\u0432\u043b\u0435\u043d\u0438\u0435 Intel.<\/p>\n<p>  <b>19.9999973251 \u0434\u0435\u043a\u0430\u0431\u0440\u044f<\/b> 1994 \u0433\u043e\u0434\u0430 \u0444\u0438\u0440\u043c\u0430 Intel \u043e\u0431\u044a\u044f\u0432\u0438\u043b\u0430, \u0447\u0442\u043e \u043e\u043d\u0430 \u043d\u0430\u0447\u0438\u043d\u0430\u0435\u0442 \u0437\u0430\u043c\u0435\u043d\u044f\u0442\u044c \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u043e\u0440\u044b Pentium \u043f\u043e \u0442\u0440\u0435\u0431\u043e\u0432\u0430\u043d\u0438\u044e. \u042d\u043d\u0434\u0438 \u0413\u0440\u043e\u0443\u0432 \u043f\u0440\u0438\u043d\u0435\u0441 \u043f\u0443\u0431\u043b\u0438\u0447\u043d\u044b\u0435 \u0438\u0437\u0432\u0438\u043d\u0435\u043d\u0438\u044f. \u0418\u0441\u0442\u043e\u0440\u0438\u044f \u0441\u0442\u043e\u0438\u043b\u0430 Intel \u0431\u043e\u043b\u0435\u0435 \u043f\u043e\u043b\u043e\u0432\u0438\u043d\u044b \u043f\u0440\u0438\u0431\u044b\u043b\u0438 \u0437\u0430 \u043f\u043e\u0441\u043b\u0435\u0434\u043d\u0438\u0439 \u043a\u0432\u0430\u0440\u0442\u0430\u043b 1994 \u0433\u043e\u0434\u0430 \u2014 $475 000 000.<\/p>\n<p>  \u041f\u0440\u0435\u0441\u0441\u0430 \u043d\u0435 \u0443\u0442\u0438\u0445\u0430\u043b\u0430, \u0430 \u043d\u0430\u0440\u043e\u0434 \u0445\u043e\u0442\u0435\u043b \u0444\u0430\u0442\u0430\u043b\u0438\u0442\u0438.<\/p>\n<div style=\"text-align:center;\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/post_images\/e64\/9ff\/b38\/e649ffb388727e99bcbcaf4797d67dce.jpg\" alt=\"image\" \/><\/div>\n<h2>\u0410\u043b\u0430\u043d \u042d\u0434\u0435\u043b\u044c\u043c\u0430\u043d (Alan Edelman)<\/h2>\n<p>  <\/p>\n<div style=\"text-align:center;\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/post_images\/ba1\/20c\/c3e\/ba120cc3e5f59053c311e718283cd7ce.png\" alt=\"image\" \/><\/div>\n<p>  <b>18.9999163362 \u0441\u0435\u043d\u0442\u044f\u0431\u0440\u044f<\/b> 1995 \u0433\u043e\u0434\u0430 \u0410\u043b\u0430\u043d \u042d\u0434\u0435\u043b\u044c\u043c\u0430\u043d \u043e\u043f\u0443\u0431\u043b\u0438\u043a\u043e\u0432\u0430\u043b <a href=\"http:\/\/www-math.mit.edu\/~edelman\/homepage\/papers\/pentiumbug.pdf\">\u043e\u0442\u0447\u0435\u0442<\/a>, \u0432 \u043a\u043e\u0442\u043e\u0440\u043e\u043c \u043f\u0440\u043e\u0432\u0435\u043b \u0434\u0435\u0442\u0430\u043b\u044c\u043d\u044b\u0439 \u0430\u043d\u0430\u043b\u0438\u0437 \u044d\u0442\u043e\u0439 \u043e\u0448\u0438\u0431\u043a\u0438.<\/p>\n<div style=\"text-align:center;\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/post_images\/d37\/d55\/0ce\/d37d550ce05bd8b74e1f0a11e0df2bf6.gif\" alt=\"image\" \/><\/div>\n<div style=\"text-align:center;\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/files\/b7a\/10a\/107\/b7a10a1078554bf893f617defebb477b.jpg\" alt=\"image\" \/><\/div>\n<h2>\u0427\u0438\u0442\u0430\u0442\u044c \u0435\u0449\u0435<\/h2>\n<p>  <\/p>\n<ul>\n<li><a href=\"http:\/\/download.intel.com\/support\/processors\/pentium\/sb\/FDIV_Floating_Point_Flaw_Pentium_Processor.pdf\">Statistical Analysis of Floating Point Flaw: Intel White Paper<\/a><\/li>\n<li><a href=\"http:\/\/mtarchive.blogspot.ru\/2016\/08\/pentium-bug-revisited.html\">Pentium Bug Revisited<\/a><\/li>\n<li><a href=\"https:\/\/de.mathworks.com\/company\/newsletters\/news_notes\/pdf\/win95cleve.pdf\">A Tale of Two Numbers<\/a><\/li>\n<li><a href=\"http:\/\/davefaq.com\/Opinions\/Stupid\/Pentium.html#glitch\">\u00abUnited we stand, divided we fall\u00bb<\/a><\/li>\n<li><a href=\"https:\/\/en.wikipedia.org\/wiki\/Pentium_FDIV_bug\">Wikipedia: Pentium FDIV bug<\/a><\/li>\n<li><a href=\"http:\/\/citforum.ru\/programming\/digest\/scofdebug\/#5_6\">\u00ab\u041d\u0430\u0443\u043a\u0430 \u043e\u0442\u043b\u0430\u0434\u043a\u0438\u00bb<\/a><\/li>\n<\/ul>\n<h2>P.S.<\/h2>\n<p>  <b>\u0422\u043e\u043f-10 \u0441\u043b\u043e\u0433\u0430\u043d\u043e\u0432 Intel \u00ab\u043e\u0442 \u0444\u0430\u043d\u0430\u0442\u043e\u0432\u00bb<\/b>  <\/p>\n<ul>\n<li>9.9999973251 It&#8217;s a FLAW, Dammit, not a Bug<\/li>\n<li>8.9999163362 It&#8217;s Close Enough, We Say So<\/li>\n<li>7.9999414610 Nearly 300 Correct Opcodes<\/li>\n<li>6.9999831538 You Don&#8217;t Need to Know What&#8217;s Inside<\/li>\n<li>5.9999835137 Redefining the PC&#8212;and Mathematics As Well<\/li>\n<li>4.9999999021 We Fixed It, Really<\/li>\n<li>3.9998245917 Division Considered Harmful<\/li>\n<li>2.9991523619 Why Do You Think They Call It *Floating* Point?<\/li>\n<li>1.9999103517 We&#8217;re Looking for a Few Good Flaws<\/li>\n<li>0.9999999998 The Errata Inside<\/li>\n<\/ul>\n<p> \u0441\u0441\u044b\u043b\u043a\u0430 \u043d\u0430 \u043e\u0440\u0438\u0433\u0438\u043d\u0430\u043b \u0441\u0442\u0430\u0442\u044c\u0438 <a href=\"https:\/\/habrahabr.ru\/post\/314534\/\"> https:\/\/habrahabr.ru\/post\/314534\/<\/a><\/p>\n","protected":false},"excerpt":{"rendered":"<p><i>\u00ab\u041e\u0448\u0438\u0431\u043a\u0430 \u0432 Pentium \u043d\u0430\u0441\u0442\u043e\u043b\u044c\u043a\u043e \u0441\u043f\u0435\u0446\u0438\u0444\u0438\u0447\u043d\u0430\u044f, \u0447\u0442\u043e \u043e\u0431\u044b\u0447\u043d\u044b\u0439 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044c \u0441\u0442\u043e\u043b\u043a\u043d\u0435\u0442\u0441\u044f \u0441 \u043d\u0435\u0439 \u0440\u0430\u0437 \u0432 27000 \u043b\u0435\u0442\u00bb<\/i><br \/>   \u2014 \u0440\u0443\u043a\u043e\u0432\u043e\u0434\u0441\u0442\u0432\u043e Intel<\/p>\n<p>  <i>\u00ab\u0412\u043e\u0442 \u0432\u0430\u043c \u043f\u0440\u0430\u0432\u0434\u043e\u043f\u043e\u0434\u043e\u0431\u043d\u044b\u0439 \u0441\u0446\u0435\u043d\u0430\u0440\u0438\u0439, \u043a\u043e\u0433\u0434\u0430 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044c \u0431\u0443\u0434\u0435\u0442 \u0441\u0442\u0430\u043b\u043a\u0438\u0432\u0430\u0442\u044c\u0441\u044f \u0441 \u043e\u0448\u0438\u0431\u043a\u043e\u0439 \u043a\u0430\u0436\u0434\u044b\u0435 3 \u043c\u0438\u043b\u043b\u0438\u0441\u0435\u043a\u0443\u043d\u0434\u044b\u00bb<\/i><br \/>   \u2014 \u0412\u043e\u044d\u043d \u041f\u0440\u0430\u0442\u0442 (\u0434\u0438\u0437\u0430\u0439\u043d\u0435\u0440 \u043b\u043e\u0433\u043e\u0442\u0438\u043f\u0430 SUN \u0438 \u0441\u043e\u0430\u0432\u0442\u043e\u0440 <a href=\"https:\/\/ru.wikipedia.org\/wiki\/%D0%90%D0%BB%D0%B3%D0%BE%D1%80%D0%B8%D1%82%D0%BC_%D0%9A%D0%BD%D1%83%D1%82%D0%B0_%E2%80%94_%D0%9C%D0%BE%D1%80%D1%80%D0%B8%D1%81%D0%B0_%E2%80%94_%D0%9F%D1%80%D0%B0%D1%82%D1%82%D0%B0\">\u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c\u0430 \u041a\u043d\u0443\u0442\u0430-\u041c\u043e\u0440\u0440\u0438\u0441\u0430-\u041f\u0440\u0430\u0442\u0442\u0430<\/a>)<\/p>\n<div style=\"text-align:center;\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/files\/474\/fa9\/2c5\/474fa92c5a084a1b80a86b1d805bd921.jpg\" \/><\/div>\n<p><i>66 MHz Intel Pentium (sSpec=SX837) with the FDIV bug<\/i><\/p>\n<p>  <b>\u0412\u043e\u043f\u0440\u043e\u0441:<\/b> \u0421\u043a\u043e\u043b\u044c\u043a\u043e \u043d\u0443\u0436\u043d\u043e \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a\u043e\u0432 Pentium \u0447\u0442\u043e\u0431\u044b \u0432\u043a\u0440\u0443\u0442\u0438\u0442\u044c \u043b\u0430\u043c\u043f\u043e\u0447\u043a\u0443?<br \/>  <b>\u041e\u0442\u0432\u0435\u0442:<\/b> 1.99904274017, \u0442\u0430\u043a\u043e\u0439 \u043e\u0442\u0432\u0435\u0442 \u0434\u043e\u043b\u0436\u0435\u043d \u0443\u0434\u043e\u0432\u043b\u0435\u0442\u0432\u043e\u0440\u0438\u0442\u044c \u043b\u044e\u0434\u0435\u0439 \u0431\u0435\u0437 \u0442\u0435\u0445\u043d\u0438\u0447\u0435\u0441\u043a\u043e\u0433\u043e \u043e\u0431\u0440\u0430\u0437\u043e\u0432\u0430\u043d\u0438\u044f.<\/p>\n<p>  \u0410 \u0442\u0435\u043f\u0435\u0440\u044c \u0433\u043b\u0430\u0432\u043d\u044b\u0439 \u0432\u043e\u043f\u0440\u043e\u0441: \u00ab\u0427\u0435\u043c \u0437\u0430\u043d\u0438\u043c\u0430\u043b\u0441\u044f \u0422\u043e\u043c\u0430\u0441 \u041d\u0430\u0439\u0441\u043b\u0438 \u0441 \u043d\u0430\u0447\u0430\u043b\u0430 \u0438\u044e\u043d\u044f \u0434\u043e \u043a\u043e\u043d\u0446\u0430 \u043e\u043a\u0442\u044f\u0431\u0440\u044f 1994 \u0433\u043e\u0434\u0430?\u00bb  <\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[],"tags":[],"class_list":["post-280590","post","type-post","status-publish","format-standard","hentry"],"_links":{"self":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts\/280590","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=280590"}],"version-history":[{"count":0,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts\/280590\/revisions"}],"wp:attachment":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=280590"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=280590"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=280590"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}