Browse Source

Added hypot.c

ceriel 33 years ago
parent
commit
9f0ae1f44c
3 changed files with 40 additions and 0 deletions
  1. 1 0
      lang/cem/libcc.ansi/misc/.distr
  2. 1 0
      lang/cem/libcc.ansi/misc/LIST
  3. 38 0
      lang/cem/libcc.ansi/misc/hypot.c

+ 1 - 0
lang/cem/libcc.ansi/misc/.distr

@@ -21,3 +21,4 @@ sleep.c
 telldir.c
 termcap.c
 mktemp.c
+hypot.c

+ 1 - 0
lang/cem/libcc.ansi/misc/LIST

@@ -19,3 +19,4 @@ seekdir.c
 telldir.c
 isatty.c
 mktemp.c
+hypot.c

+ 38 - 0
lang/cem/libcc.ansi/misc/hypot.c

@@ -0,0 +1,38 @@
+/*
+ * (c) copyright 1988 by the Vrije Universiteit, Amsterdam, The Netherlands.
+ * See the copyright notice in the ACK home directory, in the file "Copyright".
+ *
+ * Author: Ceriel J.H. Jacobs
+ */
+
+#include <math.h>
+
+/* $Header$ */
+
+double
+hypot(double x,double y)
+{
+	/*	Computes sqrt(x*x+y*y), avoiding overflow */
+
+	if (x < 0) x = -x;
+	if (y < 0) y = -y;
+	if (x > y) {
+		double t = y;
+		y = x;
+		x = t;
+	}
+	/* sqrt(x*x+y*y) = sqrt(y*y*(x*x/(y*y)+1.0)) = y*sqrt(x*x/(y*y)+1.0) */
+	if (y == 0.0) return 0.0;
+	x /= y;
+	return y*sqrt(x*x+1.0);
+}
+
+struct complex {
+	double r,i;
+};
+
+double
+cabs(struct complex p_compl)
+{
+	return hypot(p_compl.r, p_compl.i);
+}