[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
  	"Answer the result of dividing receiver by aNumber"
  	" 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: #/.!



More information about the Squeak-dev mailing list