Marc,
Sorry if my joke didn't come across as one. I am new to scheme.
If I understand you correctly, the calculations in this stmt will be performed with bignum arith?
(declare (flonum)) (if (> x 0.01) (* x a 3.0) (/ x a))
and to avoid that for max speed, i'd rewrite it as follows??
(declare (flonum)) (define x ..) (define a ..)
(define p (* x a 3.0)) (define q (/ x a)) (define r (> x 0.01)) (if r p q)
Subject: Re: [gambit-list] decreasing GC From: feeley@iro.umontreal.ca Date: Wed, 24 Apr 2013 14:17:39 -0400 CC: kumoyuki@gmail.com; gambit-list@iro.umontreal.ca To: zhenshen10@outlook.com
On 2013-04-24, at 12:37 PM, Zhen Shen zhenshen10@outlook.com wrote:
Havens!! Do gambit users launch rockets into space, is that the reason for having bignum arithmetic by default??!
I'm not sure if you mean that question as a criticism of Scheme, a criticism of Gambit, or an actual question (in which case the answer is yes). It is not so much that bignum arithmetic is "on by default". It is really a consequence of the language design which specifies that Scheme arithmetic corresponds to mathematics when operating on exact numbers. There are plenty of languages to choose from if you prefer (expt 2 31) returning -2147483648 .
Oh, and speaking of "exact" arithmetic, I thought that was impossible cause digital computers cant store reals?
Anyhow, thanks to your and brad's suggestions, I made significant improvements: memory usage is 3GB (down from 18GB!) and execution time descreased by 80%. This is mostly due to the flonums.
Now, doing (declare (flonum)) at the top level, does this stop gambit from boxing flonums across function calls?
No, flonums are kept unboxed only within a basic-block of code (a block of code uninterrupted by a jump, such as an "if" or function call). So it pays to think carefully about where floating point calculations are placed. Sometimes it is beneficial to recompute a result if it prevents carrying an intermediate result accross a jump.
Marc