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

commits at source.squeak.org commits at source.squeak.org
Tue Apr 26 09:22:46 UTC 2022

```Nicolas Cellier uploaded a new version of Kernel to project The Trunk:
http://source.squeak.org/trunk/Kernel-nice.1461.mcz

==================== Summary ====================

Name: Kernel-nice.1461
Author: nice
Time: 26 April 2022, 11:22:41.16552 am
UUID: 45d507fb-8cd8-164a-94a7-66d354f4aeaa
Ancestors: Kernel-nice.1460

Provide a more robust version of Complex divideSecureBy:, at least passing the new tests.

=============== Diff against Kernel-nice.1460 ===============

Item was changed:
----- Method: Complex>>divideSecureBy: (in category 'arithmetic') -----
divideSecureBy: anObject
" Both operands are scaled to avoid arithmetic overflow. This algorithm
works for a wide range of values, but it requires six divisions.
#divideFastAndSecureBy:  is also quite good, but it uses only 3 divisions.
+ 	   Note: #reciprocal uses #/ for division"
- 	   Note: #reciprocal uses #/ for devision"

| s ars ais brs bis newReal newImaginary |
anObject isComplex ifTrue:
+ 		[s := anObject real abs max: anObject imaginary abs.
- 		[s := anObject real abs + anObject imaginary abs.
ars := self real / s.
ais := self imaginary / s.
brs := anObject real / s.
bis := anObject imaginary / s.
s := brs squared + bis squared.
+ 		 brs := brs / s.
+ 		 bis := bis / s.

+ 		newReal := ars*brs + (ais*bis).
+ 		newImaginary := ais*brs - (ars*bis).
- 		newReal := ars*brs + (ais*bis) /s.
- 		newImaginary := ais*brs - (ars*bis)/s.
^ Complex real: newReal imaginary: newImaginary].
^ anObject adaptToComplex: self andSend: #/.!

```