changeset 566:90b93790c544

Number and Math documentation and minor changes
author Franklin Schmidt <fschmidt@gmail.com>
date Sun, 05 Jul 2015 18:26:04 -0600
parents 22bfd8a2eaee
children 6c00b8a59240
files core/src/luan/modules/Math.luan core/src/luan/modules/MathLuan.java core/src/luan/modules/Number.luan website/src/manual.html.luan
diffstat 4 files changed, 137 insertions(+), 201 deletions(-) [+]
line wrap: on
line diff
--- a/core/src/luan/modules/Math.luan	Sun Jul 05 00:47:00 2015 -0600
+++ b/core/src/luan/modules/Math.luan	Sun Jul 05 18:26:04 2015 -0600
@@ -2,6 +2,8 @@
 local MathLuan = require "java:luan.modules.MathLuan"
 local JavaMath = require "java:java.lang.Math"
 local Integer = require "java:java.lang.Integer"
+local Double = require "java:java.lang.Double"
+
 
 local M = {}
 
@@ -16,22 +18,19 @@
 M.deg = MathLuan.deg
 M.exp = MathLuan.exp
 M.floor = MathLuan.floor
+M.fmod = MathLuan.fmod
+M.huge = Double.POSITIVE_INFINITY
 M.log = MathLuan.log
+M.max = MathLuan.max
+M.max_integer = Integer.MAX_VALUE
 M.min = MathLuan.min
 M.min_integer = Integer.MIN_VALUE
-M.max = MathLuan.max
-M.max_integer = Integer.MAX_VALUE
 M.modf = MathLuan.modf
 M.pi = JavaMath.PI
-M.pow = MathLuan.pow
 M.rad = MathLuan.rad
 M.random = MathLuan.random
 M.sin = MathLuan.sin
-M.sinh = MathLuan.sinh
 M.sqrt = MathLuan.sqrt
 M.tan = MathLuan.tan
-M.tanh = MathLuan.tanh
-
-M.long_to_string = MathLuan.long_to_string
 
 return M
--- a/core/src/luan/modules/MathLuan.java	Sun Jul 05 00:47:00 2015 -0600
+++ b/core/src/luan/modules/MathLuan.java	Sun Jul 05 18:26:04 2015 -0600
@@ -54,8 +54,12 @@
 		return Math.floor(x);
 	}
 
-	public static double log(double x) {
-		return Math.log(x);
+	public static double fmod(double x,double y) {
+		return x % y;
+	}
+
+	public static double log(double x,Double base) {
+		return base==null ? Math.log(x) : Math.log(x)/Math.log(base);
 	}
 
 	public static double min(double x,double... a) {
@@ -79,10 +83,6 @@
 		return new double[]{i,x-i};
 	}
 
-	public static double pow(double x,double y) {
-		return Math.pow(x,y);
-	}
-
 	public static double rad(double x) {
 		return Math.toRadians(x);
 	}
@@ -99,10 +99,6 @@
 		return Math.sin(x);
 	}
 
-	public static double sinh(double x) {
-		return Math.sinh(x);
-	}
-
 	public static double sqrt(double x) {
 		return Math.sqrt(x);
 	}
@@ -111,12 +107,8 @@
 		return Math.tan(x);
 	}
 
-	public static double tanh(double x) {
-		return Math.tanh(x);
-	}
-
-	public static String long_to_string(long i,Integer radix) {
-		return radix==null ? Long.toString(i) : Long.toString(i,radix);
+	public static String long_to_string(long i,int radix) {
+		return Long.toString(i,radix);
 	}
 
 }
--- a/core/src/luan/modules/Number.luan	Sun Jul 05 00:47:00 2015 -0600
+++ b/core/src/luan/modules/Number.luan	Sun Jul 05 18:26:04 2015 -0600
@@ -1,11 +1,14 @@
 java()
 local BasicLuan = require "java:luan.modules.BasicLuan"
+local MathLuan = require "java:luan.modules.MathLuan"
+
 
 local M = {}
 
 M.double = BasicLuan.assert_double
 M.integer = BasicLuan.assert_integer
 M.long = BasicLuan.assert_long
-M.number_type = BasicLuan.number_type
+M.long_to_string = MathLuan.long_to_string
+M.type = BasicLuan.number_type
 
 return M
--- a/website/src/manual.html.luan	Sun Jul 05 00:47:00 2015 -0600
+++ b/website/src/manual.html.luan	Sun Jul 05 18:26:04 2015 -0600
@@ -92,6 +92,8 @@
 		<li><a href="#package_lib">Modules</a></li>
 		<li><a href="#string_lib">String Manipulation</a></li>
 		<li><a href="#table_lib">Table Manipulation</a></li>
+		<li><a href="#number_lib">Number Manipulation</a></li>
+		<li><a href="#math_lib">Mathematical Functions</a></li>
 	</ul>
 </div>
 
@@ -2765,36 +2767,69 @@
 
 
 
-
-
-
-<h2>6.7 &ndash; <a name="6.7">Mathematical Functions</a></h2>
+<h3 heading><a name="number_lib">Number Manipulation</a></h3>
+
+<p>
+Include this library by:
+
+<pre>
+	local Number = require "luan:Number"
+</pre>
+
+
+<h4 heading><a name="Number.double"><code>Number.double (x)</code></a></h4>
+<p>
+Returns <code>x</code> as a double.
+
+
+<h4 heading><a name="Number.integer"><code>Number.integer (x)</code></a></h4>
+<p>
+If the value <code>x</code> is convertible to an integer,
+returns that integer.
+Otherwise throws an error.
+
+
+<h4 heading><a name="Number.long"><code>Number.long (x)</code></a></h4>
+<p>
+If the value <code>x</code> is convertible to an long,
+returns that long.
+Otherwise throws an error.
+
+
+<h4 heading><a name="Number.long_to_string"><code>Number.long_to_string (i, radix)</code></a></h4>
+<p>
+Converts long value <code>i</code> to a string by calling <code><a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Long.html#toString(long,%20int)">Long.toString</a></code>.
+
+
+<h4 heading><a name="Number.type"><code>Number.type (x)</code></a></h4>
+<p>
+Returns a string for the numeric type of <code>x</code>.  Possible return values include "<code>integer</code>", "<code>long</code>", "<code>double</code>", and "<code>float</code>".
+
+
+
+
+<h3 heading><a name="math_lib">Mathematical Functions</a></h3>
+
+<p>
+Include this library by:
+
+<pre>
+	local Math = require "luan:Math"
+</pre>
 
 <p>
 This library provides basic mathematical functions.
-It provides all its functions and constants inside the table <a name="pdf-math"><code>math</code></a>.
-Functions with the annotation "<code>integer/float</code>" give
-integer results for integer arguments
-and float results for float (or mixed) arguments.
-Rounding functions
-(<a href="#pdf-math.ceil"><code>math.ceil</code></a>, <a href="#pdf-math.floor"><code>math.floor</code></a>, and <a href="#pdf-math.modf"><code>math.modf</code></a>)
-return an integer when the result fits in the range of an integer,
-or a float otherwise.
-
-
-<p>
-<hr><h3><a name="pdf-math.abs"><code>math.abs (x)</code></a></h3>
-
-
-<p>
-Returns the absolute value of <code>x</code>. (integer/float)
-
-
-
-
-<p>
-<hr><h3><a name="pdf-math.acos"><code>math.acos (x)</code></a></h3>
-
+It provides all its functions and constants inside the table <code>Math</code>.
+
+
+<h4 heading><a name="Math.abs"><code>Math.abs (x)</code></a></h4>
+
+<p>
+Returns the absolute value of <code>x</code>.
+
+
+
+<h4 heading><a name="Math.acos"><code>Math.acos (x)</code></a></h4>
 
 <p>
 Returns the arc cosine of <code>x</code> (in radians).
@@ -2802,9 +2837,7 @@
 
 
 
-<p>
-<hr><h3><a name="pdf-math.asin"><code>math.asin (x)</code></a></h3>
-
+<h4 heading><a name="Math.asin"><code>Math.asin (x)</code></a></h4>
 
 <p>
 Returns the arc sine of <code>x</code> (in radians).
@@ -2812,29 +2845,18 @@
 
 
 
-<p>
-<hr><h3><a name="pdf-math.atan"><code>math.atan (y [, x])</code></a></h3>
-
-
-<p>
-
+<h4 heading><a name="Math.atan"><code>Math.atan (y, x)</code></a></h4>
+
+<p>
 Returns the arc tangent of <code>y/x</code> (in radians),
 but uses the signs of both parameters to find the
 quadrant of the result.
 (It also handles correctly the case of <code>x</code> being zero.)
 
 
-<p>
-The default value for <code>x</code> is 1,
-so that the call <code>math.atan(y)</code>
-returns the arc tangent of <code>y</code>.
-
-
-
-
-<p>
-<hr><h3><a name="pdf-math.ceil"><code>math.ceil (x)</code></a></h3>
-
+
+
+<h4 heading><a name="Math.ceil"><code>Math.ceil (x)</code></a></h4>
 
 <p>
 Returns the smallest integral value larger than or equal to <code>x</code>.
@@ -2842,9 +2864,7 @@
 
 
 
-<p>
-<hr><h3><a name="pdf-math.cos"><code>math.cos (x)</code></a></h3>
-
+<h4 heading><a name="Math.cos"><code>Math.cos (x)</code></a></h4>
 
 <p>
 Returns the cosine of <code>x</code> (assumed to be in radians).
@@ -2852,9 +2872,7 @@
 
 
 
-<p>
-<hr><h3><a name="pdf-math.deg"><code>math.deg (x)</code></a></h3>
-
+<h4 heading><a name="Math.deg"><code>Math.deg (x)</code></a></h4>
 
 <p>
 Converts the angle <code>x</code> from radians to degrees.
@@ -2862,9 +2880,7 @@
 
 
 
-<p>
-<hr><h3><a name="pdf-math.exp"><code>math.exp (x)</code></a></h3>
-
+<h4 heading><a name="Math.exp"><code>Math.exp (x)</code></a></h4>
 
 <p>
 Returns the value <em>e<sup>x</sup></em>
@@ -2873,9 +2889,7 @@
 
 
 
-<p>
-<hr><h3><a name="pdf-math.floor"><code>math.floor (x)</code></a></h3>
-
+<h4 heading><a name="Math.floor"><code>Math.floor (x)</code></a></h4>
 
 <p>
 Returns the largest integral value smaller than or equal to <code>x</code>.
@@ -2883,31 +2897,24 @@
 
 
 
-<p>
-<hr><h3><a name="pdf-math.fmod"><code>math.fmod (x, y)</code></a></h3>
-
+<h4 heading><a name="Math.fmod"><code>Math.fmod (x, y)</code></a></h4>
 
 <p>
 Returns the remainder of the division of <code>x</code> by <code>y</code>
-that rounds the quotient towards zero. (integer/float)
-
-
-
-
-<p>
-<hr><h3><a name="pdf-math.huge"><code>math.huge</code></a></h3>
-
-
-<p>
-The float value <code>HUGE_VAL</code>,
-a value larger than any other numerical value.
-
-
-
-
-<p>
-<hr><h3><a name="pdf-math.log"><code>math.log (x [, base])</code></a></h3>
-
+that rounds the quotient towards zero.
+
+
+
+
+<h4 heading><a name="Math.huge"><code>Math.huge</code></a></h4>
+
+<p>
+A value larger than any other numerical value.
+
+
+
+
+<h4 heading><a name="Math.log"><code>Math.log (x [, base])</code></a></h4>
 
 <p>
 Returns the logarithm of <code>x</code> in the given base.
@@ -2917,56 +2924,47 @@
 
 
 
-<p>
-<hr><h3><a name="pdf-math.max"><code>math.max (x, &middot;&middot;&middot;)</code></a></h3>
-
+<h4 heading><a name="Math.max"><code>Math.max (x, &middot;&middot;&middot;)</code></a></h4>
 
 <p>
 Returns the argument with the maximum value,
-according to the Lua operator <code>&lt;</code>. (integer/float)
-
-
-
-
-<p>
-<hr><h3><a name="pdf-math.maxinteger"><code>math.maxinteger</code></a></h3>
+according to the Lua operator <code>&lt;</code>.
+
+
+
+
+<h4 heading><a name="Math.max_integer"><code>Math.max_integer</code></a></h4>
+<p>
 An integer with the maximum value for an integer.
 
 
 
 
-<p>
-<hr><h3><a name="pdf-math.min"><code>math.min (x, &middot;&middot;&middot;)</code></a></h3>
-
+<h4 heading><a name="Math.min"><code>Math.min (x, &middot;&middot;&middot;)</code></a></h4>
 
 <p>
 Returns the argument with the minimum value,
-according to the Lua operator <code>&lt;</code>. (integer/float)
-
-
-
-
-<p>
-<hr><h3><a name="pdf-math.mininteger"><code>math.mininteger</code></a></h3>
+according to the Lua operator <code>&lt;</code>.
+
+
+
+
+<h4 heading><a name="Math.min_integer"><code>Math.min_integer</code></a></h4>
+<p>
 An integer with the minimum value for an integer.
 
 
 
 
-<p>
-<hr><h3><a name="pdf-math.modf"><code>math.modf (x)</code></a></h3>
-
+<h4 heading><a name="Math.modf"><code>Math.modf (x)</code></a></h4>
 
 <p>
 Returns the integral part of <code>x</code> and the fractional part of <code>x</code>.
-Its second result is always a float.
-
-
-
-
-<p>
-<hr><h3><a name="pdf-math.pi"><code>math.pi</code></a></h3>
-
+
+
+
+
+<h4 heading><a name="Math.pi"><code>Math.pi</code></a></h4>
 
 <p>
 The value of <em>&pi;</em>.
@@ -2974,9 +2972,7 @@
 
 
 
-<p>
-<hr><h3><a name="pdf-math.rad"><code>math.rad (x)</code></a></h3>
-
+<h4 heading><a name="Math.rad"><code>Math.rad (x)</code></a></h4>
 
 <p>
 Converts the angle <code>x</code> from degrees to radians.
@@ -2984,8 +2980,7 @@
 
 
 
-<p>
-<hr><h3><a name="pdf-math.random"><code>math.random ([m [, n]])</code></a></h3>
+<h4 heading><a name="Math.random"><code>Math.random ([m [, n])</code></a></h4>
 
 
 <p>
@@ -2993,35 +2988,21 @@
 returns a pseudo-random float with uniform distribution
 in the range  <em>[0,1)</em>.  
 When called with two integers <code>m</code> and <code>n</code>,
-<code>math.random</code> returns a pseudo-random integer
+<code>Math.random</code> returns a pseudo-random integer
 with uniform distribution in the range <em>[m, n]</em>.
-(The value <em>m-n</em> cannot be negative and must fit in a Lua integer.)
-The call <code>math.random(n)</code> is equivalent to <code>math.random(1,n)</code>.
+(The value <em>m-n</em> cannot be negative and must fit in a Luan integer.)
+The call <code>Math.random(n)</code> is equivalent to <code>Math.random(1,n)</code>.
 
 
 <p>
 This function is an interface to the underling
-pseudo-random generator function provided by C.
+pseudo-random generator function provided by Java.
 No guarantees can be given for its statistical properties.
 
 
 
 
-<p>
-<hr><h3><a name="pdf-math.randomseed"><code>math.randomseed (x)</code></a></h3>
-
-
-<p>
-Sets <code>x</code> as the "seed"
-for the pseudo-random generator:
-equal seeds produce equal sequences of numbers.
-
-
-
-
-<p>
-<hr><h3><a name="pdf-math.sin"><code>math.sin (x)</code></a></h3>
-
+<h4 heading><a name="Math.sin"><code>Math.sin (x)</code></a></h4>
 
 <p>
 Returns the sine of <code>x</code> (assumed to be in radians).
@@ -3029,9 +3010,7 @@
 
 
 
-<p>
-<hr><h3><a name="pdf-math.sqrt"><code>math.sqrt (x)</code></a></h3>
-
+<h4 heading><a name="Math.sqrt"><code>Math.sqrt (x)</code></a></h4>
 
 <p>
 Returns the square root of <code>x</code>.
@@ -3040,9 +3019,7 @@
 
 
 
-<p>
-<hr><h3><a name="pdf-math.tan"><code>math.tan (x)</code></a></h3>
-
+<h4 heading><a name="Math.tan"><code>Math.tan (x)</code></a></h4>
 
 <p>
 Returns the tangent of <code>x</code> (assumed to be in radians).
@@ -3050,41 +3027,6 @@
 
 
 
-<p>
-<hr><h3><a name="pdf-math.tointeger"><code>math.tointeger (x)</code></a></h3>
-
-
-<p>
-If the value <code>x</code> is convertible to an integer,
-returns that integer.
-Otherwise, returns <b>nil</b>.
-
-
-
-
-<p>
-<hr><h3><a name="pdf-math.type"><code>math.type (x)</code></a></h3>
-
-
-<p>
-Returns "<code>integer</code>" if <code>x</code> is an integer,
-"<code>float</code>" if it is a float,
-or <b>nil</b> if <code>x</code> is not a number.
-
-
-
-
-<p>
-<hr><h3><a name="pdf-math.ult"><code>math.ult (m, n)</code></a></h3>
-
-
-<p>
-Returns a boolean,
-true if integer <code>m</code> is below integer <code>n</code> when
-they are compared as unsigned integers.
-
-
-