Como dije en otras respuestas, Float es inexacto. Además, recuerde que la flotación de Visualworks predeterminada con precisión única (alrededor de 7 lugares decimales), si posifica su número de flotación con la letra d, como 5.1d obtendrá una precisión doble (aproximadamente 15 decimales), menos inexacta, pero aún inexacta.
Una fuente adicional de confusión es que dos Float diferentes pueden imprimirse con la misma representación decimal aproximada en Visualworks.
5.1 squared printString
-> '26.01'
pero
5.1 squared = 26.01
-> false
Tenga en cuenta que Squeak reciente o impresiones Pharo sólo lo suficiente decimales para distinguir diferentes flotador (y reinterpretan sin cambios)
5.1 squared
->26.009999999999998
Como alternativa, puede utilizar la llamada FixedPoint (en VisualWorks o ScaledDecimales en otros sabores) para realizar operaciones exactas:
theTestArray := #(1.2s 3 5.1s 7).
self assert: theTestArray squareOfAllElements = #(1.44s 9 26.01s 49).
También tenga cuidado con esta otra trampa: un FixedPoint (ScaledDecimals) imprime solo tantos decimales después del punto de fracción como se le dijo, pero internamente puede contener más (infinitamente muchos).
5.1s1 squared printString
-> '26.0s1'
pero
5.1s1 squared = 26.01s2
-> true