AW: [BUG][FIX] FloatArrayIsZero
Alexander Lazarevic
Alexander at Lazarevic.de
Fri Apr 2 15:21:21 UTC 2004
Hi Frank!
I did not change any semantics. With some recent update the expression =
0 was replaced by isZero in some places. Because isZero was missing in
FloatArray the DNU error showed up when dividing a float by a
FloatArray.
A division, which has a FloatArray as dividend or divisor, is defined
symmetrically, so with my example
2.0 / (1 2) = (1 2) / 2.0 = (0.5 1.0) (1)
is true. This is just the way it is defined and what made sense to the
author of that class. You can do a kind of arithmetic with Collections,
too. See Class Collections in the category arithmetic. Another thing is,
that 1 + 4 * 3 = 15 contains only Magnitudes (Integers) and is true in
Smalltalk (because of the definition of * and + in Smalltalk), but does
not make a mathematical sense to most people.
The only problem with isZero in FloatArray that I can see is that it
_always_ will return false. This is no problem regarding division
because this a valid operation
1.0 / #(0.0 0.0) asFloatArray --> #(0.0 0.0)
But this could be a surprise
#(0.0 0.0) asFloatArray isZero --> false
Alex
------------------------------------------------------------------------
-
(1) This is an abbreviation of
((2.0 / #(1 2) asFloatArray) = (#(1 2) asFloatArray / 2.0)) =
((2.0 / #(1 2) asFloatArray) = #(0.5 1.0) asFloatArray) =
((#(1 2) asFloatArray / 2.0) = #(0.5 1.0) asFloatArray)
-----Ursprüngliche Nachricht-----
Von: squeak-dev-bounces at lists.squeakfoundation.org
[mailto:squeak-dev-bounces at lists.squeakfoundation.org] Im Auftrag von
Frank Shearar
Gesendet: Freitag, 2. April 2004 13:47
An: 'The general-purpose Squeak developers list'
Betreff: RE: [BUG][FIX] FloatArrayIsZero
> >>> "Alexander at Lazarevic.de" 04/02/04 09:18 >>>
>
>
> Installing Scamper into the latest 3.7alpha from SqueakMap will fail
> because of the following. (The bug is not in scamper, but that's how I
> found the bug)
>
> "Change Set: FloatArrayIsZero
> Date: 2 April 2004
> Author: Alexander at Lazarevic.de
>
> Division with FloatArrays will fail because of a missing isZero
> method. This just adds this method to the class FloatArray.
>
> Testcase :)
> 2.0 / #(1 2) asFloatArray
> "
I'm assuming you expect a FloatArray containing 2.0 and 1.0 from your
sample expression, right? That is, "return a FloatArray containing the
result of dividing 2.0 by the elements of #(1 2)".
At first I thought your change perfectly reasonable. But what does
#isZero actually mean for an array? I mean, we can talk about the zero
vector, sure, but a FloatArray (or ByteArray or IntegerArray) can't be
zero because it's not a magnitude - it's a collection.
Too, "2.0 / #(1 0) asFloatArray" won't raise a DivideByZero error (as it
should (by my interpretation of your test case)).
If you're thinking of a FloatArray as a vector (in the mathematical
sense) you can happily talk of "#(1 2) asFloatArray / 2" - that's part
of what makes something a vector space. But dividing a scalar by a
vector makes no sense in a vector space.
frank
More information about the Squeak-dev
mailing list
|