diff options
| author | Cliff Click <cliffc@acm.org> | 2025-04-02 14:55:48 -0700 |
|---|---|---|
| committer | Cliff Click <cliffc@acm.org> | 2025-04-02 14:55:48 -0700 |
| commit | b73a1146a1af2eabe6af1ba043fc6ff5ef8731ab (patch) | |
| tree | 645c7a1a72f8bb7d292977a16c3e7ef9ffc6f0ec | |
| parent | 9452d347d07ff38f6897be0ff8e9a50b7b43ddc3 (diff) | |
| download | Simple-b73a1146a1af2eabe6af1ba043fc6ff5ef8731ab.tar.gz Simple-b73a1146a1af2eabe6af1ba043fc6ff5ef8731ab.zip | |
parse negative floats
| -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; } }; |
