From b73a1146a1af2eabe6af1ba043fc6ff5ef8731ab Mon Sep 17 00:00:00 2001 From: Cliff Click Date: Wed, 2 Apr 2025 14:55:48 -0700 Subject: parse negative floats --- chapter21/src/main/java/com/seaofnodes/simple/Parser.java | 1 + chapter21/src/test/java/com/seaofnodes/simple/progs/newtonFloat.smp | 3 ++- 2 files changed, 3 insertions(+), 1 deletion(-) (limited to 'chapter21/src') 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; } }; -- cgit v1.2.3