Commit Graph

60 Commits (cd89da032d84beb55568c306e7fc19ec13827cfd)

Author SHA1 Message Date
Doug Coleman 00338f62f3 factor: put inline on same line as ; for experimentation 2015-08-10 12:55:27 -05:00
Jon Harper 53efceb0ad math.integers, comment and simplify bignum/f
change the "while" that could only execute once to "when"
change the f/loop word name to "mantissa-and-guard" since it's what it
computes
change the check against 2^53 to be explicit
2015-07-26 12:33:56 -07:00
Jon Harper 5424ad5586 math.integers, bignum/f, improve performance.
This changes avoids looping many times if the denominator is a power of
2. After this change, the implementation matches the linked sbcl
algorithm.  This was probably a mistake done when porting the algorithm.
Basically, as an optimization, all trailing zeros are removed from the
base2 representation of the denominator to have smaller bignums to
divide. But the previous factor implementation didn't take this into
account when making the initial guess of the shift of the numerator to
obtain a result in the range [2^54-1,2^53]. The loop would then correct
the initial guess by a factor of 2 at each iteration, so it would run as
many iteration as the denominator base2 power reduction, instead of only
a few times. For pathological cases, the speed up is huge (10^4):
1 1000 2^ bignum/f
2015-07-26 12:33:55 -07:00
Jon Harper cc6d90a096 math.integers, fix bignum/f for results in ]0x1.0p-1022,0x0.4p-1022] 2015-07-26 12:33:55 -07:00
John Benediktsson 89e3cc511e math: moving >fraction to math. 2015-07-19 16:57:45 -07:00
Doug Coleman 69ee8b9190 core, basis: Don't use the IN: foo.private feature and undocument it.
It only works well when you are loading code dynamically.
2015-06-30 08:51:07 -07:00
John Benediktsson 621b50a8e5 cpu: enable bit-test intrinsic for fixnum-bit?. 2015-06-17 19:11:10 -07:00
John Benediktsson db9cfeeae2 math.integers: simplify fixnum-bit?. 2015-06-17 18:42:11 -07:00
John Benediktsson ed786070e2 math.integers: fixnum-bit? should not use fixnum-shift-fast. 2015-06-17 08:22:00 -07:00
John Benediktsson d60d098c11 math.integers: speedup to fixnum-bit?. 2015-06-07 11:08:57 -07:00
John Benediktsson eeaa91d6c1 vm: using bignum>fixnum-strict in integer>fixnum-strict. 2014-06-07 09:46:05 -07:00
John Benediktsson 5487480126 core: cleanup USING lists. 2013-03-05 10:34:47 -08:00
John Benediktsson 6d679cf3a2 math.integers: the fixnum-log2 intrinsic didn't work due to inlining. 2013-02-27 17:08:36 -08:00
John Benediktsson 7ba77673a8 math.integers: faster fixnum-log2. 2013-02-27 16:01:34 -08:00
John Benediktsson eaed0db99a Revert "math: speed up integer>fixnum operations."
This reverts commit b467db9a9a.
2012-09-16 07:46:22 -07:00
John Benediktsson 6ea9c0fc02 math: speed up integer>fixnum operations. 2012-09-15 08:52:06 -07:00
John Benediktsson 089bdb1268 math.integers: inline fixnum-log2. 2012-09-10 17:20:12 -07:00
John Benediktsson 20100d7853 math.integers: faster fixnum-bit?. 2012-08-30 22:40:22 -07:00
Doug Coleman cd9dd9d752 core: Throw an error when assigning a bignum to a fixnum tuple slot if the bignum doesn't fit. Fixes #594. 2012-08-03 14:59:59 -07:00
Doug Coleman 6994b0eed8 math.integers: Bignum hashcode* -- call bignum>fixnum to avoid a dispatch. 2012-07-23 09:38:12 -07:00
Doug Coleman fb4e3ad9bc compiler: Fix bitand on ratios, floats. Fix shift on ratios, floats. Add integer>fixnum. Fixes #500. 2012-07-23 09:31:12 -07:00
Joe Groff 98fc1e28bd math.integers: make bignum/f round to even on tie
Fixes #372
2011-11-26 17:44:29 -08:00
Joe Groff 90f34d092c math: neg? needs to be defined for all reals 2011-11-26 15:37:58 -08:00
Joe Groff 4e8a1d0bb4 math: add neg? word
Do the right thing with integers or floats
2011-11-23 19:51:05 -08:00
Joe Groff 943596575a use radix literals 2011-11-23 19:03:40 -08:00
Slava Pestov bb4529bff2 math.integers: fix underflow and overflow behavior 2010-12-18 16:00:17 -08:00
Slava Pestov f27080498d Remove bignum>float VM primitive, and use bignum/f to implement >float on bignums instead, for a slight accuracy gain. Also, bignum/f now has a more efficient post-scaling algorithm to break the circular dependency on bignum>float 2010-11-24 22:41:15 -08:00
Slava Pestov 0c840a7965 math.integers: bignum/f rounding was wrong (reported by Joe Groff) 2010-11-13 16:02:12 -08:00
Slava Pestov 65dcd56b0b math.integers: fix 0 0 bignum/f (reported by Joe Groff) 2010-11-12 19:49:18 -08:00
Slava Pestov 1c9a95122a math.integers: remove a -rot usage 2010-02-10 15:44:49 +13:00
Daniel Ehrenberg 52f2ac2bb9 Tests for propagation additions; making fixnum-bit? inline 2010-01-25 20:15:17 -06:00
Daniel Ehrenberg d3590ea210 Merge branch 'master' of git://factorcode.org/git/factor
Conflicts:

	basis/compiler/tree/propagation/transforms/transforms.factor
2010-01-20 00:15:55 -06:00
Daniel Ehrenberg aa1651032d Adding compiler transforms in propagation 2010-01-20 00:10:49 -06:00
Slava Pestov 47a5e96547 Rework min and max so that behavior with floats and NaNs is consistent between generic arithmetic and open-coded float intrinsics 2010-01-13 22:20:16 +13:00
Joe Groff d4a207662e might want to accurately divide large negative fixnums too 2009-10-31 12:10:29 -05:00
Joe Groff a7011fe087 use bignum/f to get accurate division of fixnums >= 2^53 on 64-bit platforms 2009-10-31 12:06:56 -05:00
Slava Pestov 32b95c2cdf math: add unordered comparison operators u< u<= u> u>= which behave exactly like < <= > >= except no floating point exceptions are set if one or both inputs are NaNs; also add efficient intrinsic for unordered? predicate, and fix propagation type functions for abs, absq, and bitnot 2009-09-12 22:20:13 -05:00
Slava Pestov 2bb6293217 compiler: add fixnum-min/max intrinsics; ~10% speedup on benchmark.yuv-to-rgb 2009-08-28 19:02:59 -05:00
Slava Pestov 030b1b816c Add inline declarations for various assorted methods 2009-08-17 22:32:21 -05:00
Doug Coleman 14ef1649d4 add if-zero/when-zero/unless-zero to core/ and update usages 2009-08-11 17:59:40 -05:00
Doug Coleman 0ad6d1fb7b add a few usages of iota, remove most 1+ and 1- from core 2009-05-01 19:58:24 -05:00
Slava Pestov 0ffd43e2e3 1.0/0.0 => 1/0. 2009-04-13 19:48:08 -05:00
Slava Pestov 25a877e50b Merge OneEyed's patch 2009-02-28 17:06:55 -06:00
Samuel Tardieu 087d931c36 Remove the tail argument from do/until/while 2009-02-18 02:41:14 +01:00
Slava Pestov 669548e62e Clean up some usages of tuck, and add Joe's curried cleave/spread/apply combinators to kernel vocabulary 2009-02-02 13:43:54 -06:00
Slava Pestov b154b21aaa Add new until combinator, and a new do word which acts like a modifier: do while, do until for loops which iterate at least once 2008-12-08 23:37:18 -06:00
Slava Pestov 73b3cd6367 Use eq? instead of number= since we only ever have a fixnum here 2008-12-08 13:59:59 -06:00
Slava Pestov e4f8448eb1 Fix some problems with arithmetic type inference, exposed by recent changes to log2 word
- declared input type for bignum-shift was stricter than the runtime behavior, leading to bad propagation of type info if shift count was a bignum
- types inferred for type functions which used number-valued/integer-valued/real-valued were not always precise, eg bignum bignum bitxor => integer
- add interval-log2, type function for (log2)
- remove math-class-min, it was useless
2008-12-07 19:44:49 -06:00
Slava Pestov 8a8f0c925c Use BSR instruction to implement fixnum-log2 intrinsic 2008-12-06 15:31:17 -06:00
Slava Pestov a4d9cdfeb3 Refactor all usages of >r/r> in core to use dip, 2dip, 3dip
Non-optimizing compiler now special-cases dip, 2dip, 3dip following a
literal quotation: this allows us to break the dip/slip meta-circle
without explicit calls to >r/r>
2008-11-23 02:44:56 -06:00