📄 misc.c
字号:
/* * this file contains misc bug reports from WinBond. */#include <stdio.h>#include <math.h>#if unix#define pass(x) printf("PASS: %s\n", x);#define fail(x) printf("FAIL: %s\n", x);#endif/* The compare operation is error. Because the constant value 1.0 is not correct. It seems compare with 0 in this statement.HP-UX native: dist is 0.301 PASS: float compare *cp = be9a1cac, *cp1 = be9a1cac PASS: float multiple 1 PASS: float multiple 2 32760 / (-2) = -16380 PASS: float divide 1 32760 / (-1) = -32760 PASS: float divide 1 These test only pass if the output matches: Correct output is 1.0 = 1.000000E+00, 0.3010 = 3.000000E-01, -1.0 = -1.000000E+0 1.0 = 1.000000E+00, 0.3010 = 3.010000E-01, -1.0 = -1.000000E+00 These test only pass if the outut matches: Correct output is ans = 1.000000E+00, ans1 = 3.010000E-01, ans2 = -1.000000E+00 ans = 1.000000E+00, ans1 = 3.010000E-01, ans2 = -1.000000E+00Test run on Oki: dist is 0 PASS: float compare *cp = be9a1cac, *cp1 = be9a1cac PASS: float multiple 1 PASS: float multiple 2 32760 / (-2) = -2147467268 PASS: float divide 1 32760 / (-1) = 32760 PASS: float divide 1 These test only pass if the output matches: Correct output is 1.0 = 1.000000E+00, 0.3010 = 3.000000E-01, -1.0 = -1.000000E+0 1.0 = 1.586860E-318, 0.3010 = -1.009091E-303, -1.0 = 5.290504E-315 These test only pass if the outut matches: Correct output is ans = 1.000000E+00, ans1 = 3.010000E-01, ans2 = -1.000000E+00 ans = 4.940656E-324, ans1 = -5.299809E-315, ans2 = 5.290504E-315 */main(){ float dist = 0.3010; printf ("dist is %G\n", dist); if ( dist < 1.0 ) { pass ("float compare"); } else { fail ("float compare"); } test_1(); test_2(); test_3(); test_4(); fflush (stdout);}/* * *cp = be9a1cac, *cp1 = 00000000 */test_1(){ float i, ans, ans1; unsigned int *cp=&ans, *cp1=&ans1; i = 0.3010; ans = (-1.0) * 0.3010 * 1.0; /* OK */ ans1 = (-1.0) * i * 1.0; /* Disaster */ printf ("*cp = %08x, *cp1 = %08x\n", *cp, *cp1); if (*cp != 0xbe9a1cac) { fail ("float multiple 1"); } else { pass ("float multiple 1"); } if (*cp1 != 0xbe9a1cac) { fail ("float multiple 2"); } else { pass ("float multiple 2"); }}/* Positive integer divide Negative integer may get interesting result. For examples: EX1: 32760 / (-2) = -2147467268 */test_2(){ int value, i, j; i = 32760; j = -2; value = i / (j); printf ("%d / (%d) = %d\n", i, j, value); if (value != -16380) { fail ("float divide 1"); } else { pass ("float divide 1"); }}/* EX2: 32760 / (-1) = 32760 */test_3(){ int value, i, j; i = 32760; j = -1; value = i / (j); printf ("%d / (%d) = %d\n", i, j, value); if (value != -32760) { fail ("float divide 1"); } else { pass ("float divide 1"); }}/* The data output format %e, %E, %g, %G in printf() can not work. Please test the following example: 1.0 = 1.000000E+00, 0.3010 = 3.009999E-01, -1.0 = -1.000000E+00 ans = 4.940656E-324, ans1 = -5.299809E-315, ans2 = 5.290504E-315 */test_4(){ float ans, ans1, ans2; ans = 1.0; ans1 = 0.3010; ans2 = -1.0; printf ("These test only pass if the output matches:\nCorrect output is\n1.0 = 1.000000E+00, 0.3010 = 3.000000E-01, -1.0 = -1.000000E+0\n"); printf ("1.0 = %E, 0.3010 = %E, -1.0 = %E\n", 1.0, 0.3010, -1.0); printf ("These test only pass if the outut matches:\nCorrect output is\nans = 1.000000E+00, ans1 = 3.010000E-01, ans2 = -1.000000E+00\n"); printf ("ans = %E, ans1 = %E, ans2 = %E\n", ans, ans1, ans2);}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -