[squeak-dev] The Trunk: Kernel-nice.1282.mcz

Nicolas Cellier nicolas.cellier.aka.nice at gmail.com
Fri Nov 22 16:59:22 UTC 2019


Additional notes:

The signBit of real part is preserved as long as imaginary prints with sign
-.
The signBit of imaginary part is not preserved.

(Complex real: -0.0 imaginary: -0.0) -> (-0.0 - 0.0i) -> (-0.0 + 0.0 i) ->
(0.0 + 0.0 i)

(Complex real: -0.0 imaginary: 0.0) -> (-0.0 + 0.0 i) -> ( 0.0 + 0.0 i)

(Complex real: 0.0 imaginary: -0.0) -> (0.0 - 0.0 i) -> ( 0.0 + 0.0 i)

In Smallapack, where I had to print and re-interpret large complex
matrices, i had to introduce selector (0.0 i: -0.0).

1. it is more efficient than arithmetic (which counts for large matrices)
2. it preserves the datas (as well as Number printString can preserve)

While 1 + 2 i can look nice and appealing, it gets quite nasty properties
regarding above points...

Le ven. 22 nov. 2019 à 17:54, <commits at source.squeak.org> a écrit :

> Nicolas Cellier uploaded a new version of Kernel to project The Trunk:
> http://source.squeak.org/trunk/Kernel-nice.1282.mcz
>
> ==================== Summary ====================
>
> Name: Kernel-nice.1282
> Author: nice
> Time: 22 November 2019, 5:54:28.478745 pm
> UUID: 70d4bc61-04e8-4cfd-befb-1b23f3f13953
> Ancestors: Kernel-mt.1281
>
> Let complex print the correct signBit of its imaginary part in case of
> negativeZero.
>
> Note: the signBit are not preserved upon reinterpretation.
> That's a problem of representation via arithmetic operation 1 + 2 i
> because we have this
> 0.0 - 0.0 -> 0.0
> 0.0 + (-0.0) -> 0.0
> (-0.0) + (-0.0) -> -0.0
> (-0.0) - 0.0 -> -0.0
>
> =============== Diff against Kernel-mt.1281 ===============
>
> Item was changed:
>   ----- Method: Complex>>printOn: (in category 'printing') -----
>   printOn: aStream
>         real printOn: aStream.
>         aStream nextPut: Character space.
> +       imaginary signBit = 0
> -       0 <= imaginary
>                 ifTrue: [aStream nextPut: $+]
>                 ifFalse: [aStream nextPut: $-].
>         aStream nextPut: Character space.
>         imaginary abs printOn: aStream.
>         aStream nextPut: Character space.
>         aStream nextPut: $i
>   !
>
> Item was changed:
>   ----- Method: Complex>>printOn:showingDecimalPlaces: (in category
> 'printing') -----
>   printOn: aStream showingDecimalPlaces: placesDesired
>         real printOn: aStream showingDecimalPlaces: placesDesired.
>         aStream nextPut: Character space.
> +       imaginary signBit = 0
> -       0 <= imaginary
>                 ifTrue: [aStream nextPut: $+]
>                 ifFalse: [aStream nextPut: $-].
>         aStream nextPut: Character space.
>         imaginary abs printOn: aStream showingDecimalPlaces: placesDesired.
>         aStream nextPut: Character space.
>         aStream nextPut: $i
>   !
>
>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.squeakfoundation.org/pipermail/squeak-dev/attachments/20191122/b3127146/attachment.html>


More information about the Squeak-dev mailing list