Greetings, and thanks again for the report, and please excuse the delay.

I believe this is fixed now in master.  Please let me know if I have
overlooked anything.

Take care,

Daniel Gildea via <[email protected]> writes:

>> This seems like a bug:
>> 
>> GCL (GNU Common Lisp)  2.7.1 Thu Apr 10 09:38:27 PM EDT 2025  CLtL1    git: 
>> Version_2_7_2pre20
>> 
>> >(< 1.0E16 10000000000000001) 
>> NIL
>
> Here is a proposed fix.
>
>
> diff --git a/gcl/o/num_comp.c b/gcl/o/num_comp.c
> index c4c364d54..e39f6b593 100644
> --- a/gcl/o/num_comp.c
> +++ b/gcl/o/num_comp.c
> @@ -70,6 +70,8 @@ number_compare(object x, object y) {
>        return(number_compare(x, y));
>  
>      case t_shortfloat:
> +      if 
> ((float)number_to_double((q=double_to_integer((double)sf(y))))==sf(y))
> +       return(number_compare(x,q));
>        {
>         volatile float fx=fix(x);
>         dx = fx;
> @@ -78,6 +80,8 @@ number_compare(object x, object y) {
>        goto LONGFLOAT;
>  
>      case t_longfloat:
> +      if (number_to_double((q=double_to_integer(lf(y))))==lf(y))
> +       return(number_compare(x,q));
>        dx = fix(x);
>        dy = lf(y);
>        goto LONGFLOAT;
> @@ -175,6 +179,8 @@ number_compare(object x, object y) {
>      switch (ty) {
>  
>      case t_fixnum:
> +      if (number_to_double((q=double_to_integer(dx)))==dx)
> +       return(number_compare(q,y));
>  
>        if (tx==t_shortfloat) {
>         volatile float fy=fix(y);
>
>
>
>

-- 
Camm Maguire                                        [email protected]
==========================================================================
"The earth is but one country, and mankind its citizens."  --  Baha'u'llah

Reply via email to