aboutsummaryrefslogtreecommitdiff
path: root/sys/fmtio/dtcscl.x
diff options
context:
space:
mode:
Diffstat (limited to 'sys/fmtio/dtcscl.x')
-rw-r--r--sys/fmtio/dtcscl.x35
1 files changed, 35 insertions, 0 deletions
diff --git a/sys/fmtio/dtcscl.x b/sys/fmtio/dtcscl.x
new file mode 100644
index 00000000..afd6adc5
--- /dev/null
+++ b/sys/fmtio/dtcscl.x
@@ -0,0 +1,35 @@
+# Copyright(c) 1986 Association of Universities for Research in Astronomy Inc.
+
+# DTCSCL -- Scales a double precision real, maintaining maximum precision.
+# Called by DTOC and CTOD.
+
+procedure dtcscl (v, e, sense)
+
+double v # value to be scaled
+int e # exponent
+int sense # sense of scaling (0=apply e to v; 1=calc e)
+
+begin
+ if (sense == 0) # scale v by 10 ** e
+ v = v * (10.0d0 ** e)
+
+ else { # scale number to 0.1 <= v < 1.0
+ if (v == 0.0d0)
+ e = 0
+ else {
+ e = -1
+ while (v < 0.1d0) {
+ v = v * 10.0d0
+ e = e - 1
+ if (v == 0.0d0) { # check for underflow to zero
+ e = 0
+ break
+ }
+ }
+ while (v >= 1.0d0) {
+ v = v / 10.0d0
+ e = e + 1
+ }
+ }
+ }
+end