diff options
Diffstat (limited to 'chapter21/src')
| -rw-r--r-- | chapter21/src/main/java/com/seaofnodes/simple/Parser.java | 1 | ||||
| -rw-r--r-- | chapter21/src/test/java/com/seaofnodes/simple/progs/newtonFloat.smp | 3 |
2 files changed, 3 insertions, 1 deletions
diff --git a/chapter21/src/main/java/com/seaofnodes/simple/Parser.java b/chapter21/src/main/java/com/seaofnodes/simple/Parser.java index 092c5a9e..e1120a2f 100644 --- a/chapter21/src/main/java/com/seaofnodes/simple/Parser.java +++ b/chapter21/src/main/java/com/seaofnodes/simple/Parser.java @@ -1670,6 +1670,7 @@ public class Parser { while( Character.isDigit(c=nextChar()) ) ; if( !(c=='e' || c=='.') ) return --_position - old; + if( peek() == '-' ) nextChar(); while( Character.isDigit(c=nextChar()) || c=='e' || c=='.' ) ; return -(--_position - old); } diff --git a/chapter21/src/test/java/com/seaofnodes/simple/progs/newtonFloat.smp b/chapter21/src/test/java/com/seaofnodes/simple/progs/newtonFloat.smp index 5cb798a9..b41fc26e 100644 --- a/chapter21/src/test/java/com/seaofnodes/simple/progs/newtonFloat.smp +++ b/chapter21/src/test/java/com/seaofnodes/simple/progs/newtonFloat.smp @@ -1,10 +1,11 @@ // -*- mode: java; -*- // Newtons approximation to the square root val sqrt = { flt x -> + flt epsilon = 1e-57; flt guess = x; while( 1 ) { flt next = (x/guess + guess)/2; - if( next == guess ) return guess; + if( guess-epsilon <= next & next <= guess+epsilon ) return guess; guess = next; } }; |
