Thanks guys, feeling embarrased now :) A little more basic math reasoning could have helped me ;) Makes sense. What about the segmentation fault? Am I doing something wrong?
Daniel > On 24. 1. 2015, at 17:56, Matthew Flatt <mfl...@cs.utah.edu> wrote: > > Jens Axel and Alexander have provided the answer, but in case it helps > to see what they mean, try these loops that display the intermediate > results: > > (for/fold ([v 0]) ([x (in-range 100)]) > (displayln v) > (+ v (/ x 100))) > > (for/fold ([v 0]) ([x (in-range 100)]) > (displayln v) > (+ v (/ x (- 100 x)))) > > > At Sat, 24 Jan 2015 17:39:39 +0100, Daniel Kvasnička wrote: >> Hi, I'm observing the following difference in performance: >> >>> (time (exact->inexact (for/sum ([x (in-range 10000)]) (/ x 10000)))) >> cpu time: 6 real time: 6 gc time: 0 >> 4999.5 >>> (time (exact->inexact (for/sum ([x (in-range 10000)]) (/ x (- 10000 x))))) >> cpu time: 3624 real time: 3622 gc time: 39 >> 87876.06036044382 >> >> The difference seems huge to me and I'm wondering whether it's "normal" and >> what are the right tools to overcome it. >> If I understand it correctly, it's about contract checking and the fact that >> there is one more math opeartion involved does not in itself lead to such >> difference. The division operator needs to be sure that the outcome of the >> minus op. is of the right type, is that correct? >> >> If so -- and the increase in time cannot be considered a "bug" -- what is >> the >> right way to get around that. I've employed 2 ways: Typed Racket and >> switching >> the portion of code to racket/flonum. Both of these approaches resulted in >> big >> perf. improvement and basically make the computation instant again. Are >> these >> the right, "rackety", solutions? I've also tried to use unchecked ops but >> Racket 6.1.1 is constantly segfaulting on me when running this (from my >> digging I think unsafe-fl/ is what segfaults it): >> >> (time (exact->inexact (for/sum ([x (in-range 10000)]) (unsafe-fl/ (->fl x) >> (unsafe-fx- 10000 x))))) >> >> Daniel >> ____________________ >> Racket Users list: >> http://lists.racket-lang.org/users ____________________ Racket Users list: http://lists.racket-lang.org/users