Remove some of the workarounds for the tests by inputing the right numbers
authorotto <otto@openbsd.org>
Fri, 22 Apr 2022 18:05:29 +0000 (18:05 +0000)
committerotto <otto@openbsd.org>
Fri, 22 Apr 2022 18:05:29 +0000 (18:05 +0000)
(without impliciit conversion from int to long double).

The previous commit message talked about reading numbers, but the issue
(loss of precision due to too little digits) actually occurred when printing
the input to be read by bc.

regress/usr.bin/bc/t19.c

index 37373fb..70fceef 100644 (file)
@@ -1,4 +1,4 @@
-/*     $OpenBSD: t19.c,v 1.5 2022/04/22 17:37:47 otto Exp $    */
+/*     $OpenBSD: t19.c,v 1.6 2022/04/22 18:05:29 otto Exp $    */
 
 /*
  * Copyright (c) 2012 Otto Moerbeek <otto@drijf.net>
 #include <math.h>
 #include <stdio.h>
 
+#define PI 3.141592653589793238462643383279502884L
 int scale[] = { 1, 2, 3, 10, 15, 20, 30};
-long double num[] = {-10, -M_PI, -3, -2, -1, -0.5, -0.01, 0, 0.01, 
-  0.5, 1, 2, 3, M_PI, 10};
+long double num[] = {-10.0L, -PI, -3.0L, -2.0L, -1.0L, -0.5L, -0.01L, 0.0L,
+  0.01L, 0.5L, 1.0L, 2.0L, 3.0L, PI, 10.0L};
 
 struct func {const char *name; long double (*f)(long double);};
 
@@ -63,9 +64,7 @@ main(void)
                                        prec = LDBL_EPSILON;
                                prec *= 2;
                                /* XXX cheating ? */
-                               if (funcs[fi].f == logl)
-                                       prec *= 4;
-                               else if (funcs[fi].f == expl)
+                               if (funcs[fi].f == expl)
                                        prec *= 8;
                                if (diff > prec) {
                                        printf("%s %d %Le %Le %Le %Le %Le\n",