Oh thanks. That helps.

I hadn't even noticed that I was using ==  and not  =  since so few languages even allow = for equivalence.

That clears up my misunderstanding.

Thanks.

Jimmie




On 12/19/21 19:10, Jo-To Schäg wrote:
Reading the docs:

    : (help '==)
    ========================================
    (== 'any ..) -> flg
    Returns T when all any arguments are the same (pointer equality).
    See also n==
    and Comparing.

    ========================================

You are checking pointer equality once the number is big enough to spill into a different cell they are no longer pointer equal

    : (help '=)
    ========================================
    (= 'any ..) -> flg
    Returns T when all any arguments are equal (structure equality).
    See also
    Comparing.

    ========================================

Is what you want

On Sun, 19 Dec 2021 at 23:32, Jimmie Houchin <jlhouc...@gmail.com> wrote:

    I am exploring PicoLisp again after several years. The idea of
    PicoLisp is so very appealing. It is getting my reality to fit in
    its idea.

    I have revisited my original problem from this thread.

    https://www.mail-archive.com/picolisp@software-lab.de/msg07561.html


    At that time I still could not get the PicoLisp version to numbers
    to be equivalent with all other platforms I tested.

    ...

    (de loop1calc (I J N)
        (let V (*/ N (+ I N) (- J N) 0.1234567 `(* 1.0 1.0 1.0))
           (normalize (*/ V V V `(* 1.0 1.0)) ) ) )

    (de loop2calc (I J N)
        (normalize
           (*/ N
              (+ J 1.0)
              (+ N N N)
              0.1234567
              `(* 1.0 1.0 1.0) ) ) )

    ...


    When I reverse the names of these functions. What is normally
    loop2calc produces the same results as the other implementations.
    So it is what is the loop1calc function that is bringing the
    difference.

    So I began to add print statements to the loop to discover the values.

    (if (= I 1.0) ... )


    I have (scl 17) in my current file.

    I wanted to see what was at the end of the looping and I did (if
    (= I 100.0) ... ) to get the last loop and printed nothing.
    However when I did (if (> I 99.0) ... ) it printed some values for
    loop 100.0.

    So I began to play in the repl to try understand some things.


    : (== 1.0 1.0)
    -> T
    : (== 10.0 10.0)
    -> T
    : (== 100.0 100.0)
    -> T
    : (scl 5)
    -> 5
    : (== 1.0 1.0)
    -> T
    : (== 10.0 10.0)
    -> T
    : (== 100.0 100.0)
    -> T
    : (scl 9)
    -> 9
    : (== 1.0 1.0)
    -> T
    : (== 10.0 10.0)
    -> T
    : (== 100.0 100.0)
    -> T
    : (scl 17)
    -> 17
    : (== 1.0 1.0)
    -> T
    : (== 10.0 10.0)
    -> T
    : (== 100.0 100.0)
    -> NIL
    :


    What am I not understanding? Or am I just gifted at finding edge
    cases. :)

    Thanks for any help.

    Jimmie

Reply via email to