Mercurial > hg > jgplsrc
diff docs/ioj/iojComp.htm @ 0:e0bbaa717f41 draft default tip
lol J
author | Jordi Gutiérrez Hermoso <jordigh@octave.org> |
---|---|
date | Mon, 25 Nov 2013 11:56:30 -0500 |
parents | |
children |
line wrap: on
line diff
new file mode 100644 --- /dev/null +++ b/docs/ioj/iojComp.htm @@ -0,0 +1,214 @@ +<html> + +<head> +<title>An Implementation of J -- Comparatives</title> +</head> + +<body> + +<p align=center><font size="6"><b>Comparatives</b></font><br> +<font size="4"><b><a href="ioj.htm">An Implementation of J</a></b></font></p> + +<hr> +<br> + +Comparisons between finite numbers are <i>tolerant</i>, as defined in +<a href="iojBib.htm#Bernecky1977">Bernecky</a> [1977]:<br><br> + +<tt> x = y </tt>if<tt> (|x-y) <:!.0 ct * (|x)>.(|y)</tt> +<br><br> + +(<tt><:!.0 </tt>means <i>exact</i> less than or equal.) +That is,<tt> x </tt>and<tt> y </tt>are tolerantly equal if the smaller +is on or within the circle centered at the larger, having +radius<tt> ct </tt>times the magnitude of the +larger.<a name="tolerance"></a><tt> ct</tt>,<tt> </tt>comparison tolerance, +is a real number between<tt> 0 </tt>and<tt> 2^_34 </tt>with a default value +of<tt> 2^_44</tt>;<tt> </tt>a non-default tolerance may be specified +using the <i><a href="iojVerb.htm#fit">fit</a></i> conjunction +(<tt>!.</tt>).<tt> </tt>Tolerant relations can be modelled as follows:<br><br> + +<table> + +<tr> +<td> </td> +<td><tt>ct</tt></td> +<td><tt>=: </tt></td> +<td><tt>2^_44</tt></td> +<td>comparison tolerance</td> +</tr> + +<tr> +<td> </td> +<td><tt>teq</tt></td> +<td><tt>=: </tt></td> +<td><tt>|@- <:!.0 ct&*@>.&|</tt></td> +<td>equal</td> +</tr> + +<tr> +<td> </td> +<td><tt>tne</tt></td> +<td><tt>=: </tt></td> +<td><tt>-.@teq</tt></td> +<td>not equal</td> +</tr> + +<tr> +<td> </td> +<td><tt>tlt</tt></td> +<td><tt>=: </tt></td> +<td><tt>< !.0 *. tne</tt></td> +<td>less than</td> +</tr> + +<tr> +<td> </td> +<td><tt>tgt</tt></td> +<td><tt>=: </tt></td> +<td><tt>> !.0 *. tne</tt></td> +<td>greater than</td> +</tr> + +<tr> +<td> </td> +<td><tt>tle</tt></td> +<td><tt>=: </tt></td> +<td><tt><:!.0 +. teq</td> +<td>less than or equal to</td> +</tr> + +<tr> +<td> </td> +<td><tt>tge</tt></td> +<td><tt>=: </tt></td> +<td><tt>>:!.0 +. teq</td> +<td>greater than or equal to</td> +</tr> + +<tr> +<td> </td> +<td><tt>tfloor</tt></td> +<td><tt>=: </tt></td> +<td><tt><.!.0@(0.5&+) ([ - tgt) ] </td> +<td>floor</td> +</tr> + +<tr> +<td> </td> +<td><tt>tceil</tt></td> +<td><tt>=: </tt></td> +<td><tt><.!.0@(0.5&+) ([ + tlt) ]</td> +<td>ceiling</td> +</tr> + +<tr> +<td> </td> +<td><tt>dsignum</tt></td> +<td><tt>=: </tt></td> +<td><tt>ct&<@| * 0&< - 0&></td> +<td>signum (real)</td> +</tr> + +<tr> +<td> </td> +<td><tt>jsignum</tt></td> +<td><tt>=: </tt></td> +<td><tt>ct&<@| * (%|)</td> +<td>signum (complex)</td> +</tr> + +</table> +<br> + +Additionally, some comparisons internal to the system are <i>fuzzy</i>. +Fuzzy comparisons are like tolerant comparisons, but depend on the +parameter<a name="fuzz"></a><tt> fuzz</tt>,<tt> </tt>having fixed +value<tt> 2^_44</tt>.<tt> </tt>Such comparisons are used in +certain domain tests; for example,<tt> (2 3+1e_14)$'abc' </tt>is valid +but<tt> (2 3+1e_12)$'abc' </tt>is not. Fuzzy comparisons can be +modelled as follows:<br><br> + +<table> + +<tr> +<td> </td> +<td><tt>fuzz</tt></td> +<td><tt>=:</tt></td> +<td><tt>2^_44</tt></td> +</tr> + +<tr> +<td> </td> +<td><tt>int</tt></td> +<td><tt>=:</tt></td> +<td><tt>(-2^31)&<: *. <&(2^31)</tt></td> +</tr> + +<tr> +<td> </td> +<td><tt>real</tt></td> +<td><tt>=:</tt></td> +<td><tt>{.@+.</tt></td> +</tr> + +<tr> +<td> </td> +<td><tt>feq</tt></td> +<td><tt>=:</tt></td> +<td><tt>|@- <:!.0 fuzz&*@>.&|</tt></td> +</tr> + +<tr> +<td> </td> +<td><tt>freal</tt></td> +<td><tt>=:</tt></td> +<td><tt>>:!.0 / @: ((fuzz,1)&*) @: | @: +.</tt></td> +</tr> + +<tr> +<td> </td> +<td><tt>BfromD</tt></td> +<td><tt>=:</tt></td> +<td><tt>]`(1&=) @. (feq 1&=)</tt></td> +</tr> + +<tr> +<td> </td> +<td><tt>IfromD</tt></td> +<td><tt>=:</tt></td> +<td><tt>]`<. @. (int *. (feq <.))</tt></td> +</tr> + +<tr> +<td> </td> +<td><tt>DfromZ </tt></td> +<td><tt>=:</tt></td> +<td><tt>]`real @. (feq real)</tt></td> +</tr> + +</table> +<br> + +The utility<tt> int </tt>tests for membership in the +interval<tt> -2^31 </tt>to<tt> _1+2^31 </tt>inclusive.<tt> real </tt>produces +the real part of a complex number.<tt> feq </tt>is 1 if its arguments +are equal within fuzz;<tt> freal </tt>is 1 if its complex argument is within +fuzz of real.<tt> BfromD</tt>,<tt> IfromD</tt>,<tt> </tt>and<tt> DfromZ </tt>convert +between types: boolean from real ("double"), integer from real, and real +from complex.<br><br> + +<br> +<hr> + +<a href="iojATW.htm">Next</a> + • +<a href="iojDisp.htm">Previous</a> + • +<a href="iojIndex.htm">Index</a> + • +<a href="ioj.htm#TOC">Table of Contents</a> +<br> + +</body> +</html> \ No newline at end of file