summaryrefslogtreecommitdiff
path: root/gcc/testsuite/gcc.wendy/gnu25.c
diff options
context:
space:
mode:
Diffstat (limited to 'gcc/testsuite/gcc.wendy/gnu25.c')
-rwxr-xr-xgcc/testsuite/gcc.wendy/gnu25.c55
1 files changed, 55 insertions, 0 deletions
diff --git a/gcc/testsuite/gcc.wendy/gnu25.c b/gcc/testsuite/gcc.wendy/gnu25.c
new file mode 100755
index 0000000..dcc13fc
--- /dev/null
+++ b/gcc/testsuite/gcc.wendy/gnu25.c
@@ -0,0 +1,55 @@
+/*
+ * gnu25.c
+ *
+ * This was originally reported as a bug in the Sun C compiler in
+ * Sun-Spots, by ihnp4!stcvax!stc-auts!kak, but he forgot to declare
+ * double sqrt(). However, the code generated for the initialization
+ * by gcc-1.19 plus a fix, reuses fp0 for both arguments of the divide.
+ * oops! the result is always 1!
+
+ John Gilmore, 16April88
+ *
+ * showbug
+ * compile: cc showbug.c -o showbug -lm
+ */
+double sqrt();
+compare(a, b)
+ double a, b;
+{
+
+ if (a != b) return 1; /* Not computed the same */
+ if (a > 0.014) return 1; /* Wrong answer */
+ if (a < 0.012) return 1; /* Wrong answer */
+ return 0;
+}
+main()
+{
+ float mean = 0.035000;
+ int samples = 200;
+ {
+ double sigma = sqrt( (mean*(1 - mean))/ samples);
+
+ if (compare(sigma,
+ sqrt((mean*(1 - mean))/ samples ))) {
+
+ printf("sigma = sqrt( (%f)/%d) ",
+ (mean*(1 - mean)), samples );
+ printf("= sqrt( %f ) ",
+ (mean*(1 - mean))/ samples );
+ printf("= %f ",
+ sqrt((mean*(1 - mean))/ samples ));
+ printf("= %f (!)\n", sigma );
+ } else {
+ printf("Test passed\n");
+ }
+ }
+}
+
+/* We'd like to link with -lm, but "runt" doesnt do this. */
+double sqrt(x) double x;
+{
+ /* Quick fakery. */
+ if (x > .000165 && x < .00017) /* arg is right */
+ return .0129951914; /* Right result */
+ return 0; /* CHeap imitation sqrt routine */
+}