From 89ce13d4d46f61b445cd0e9b0aebaebed54d66f0 Mon Sep 17 00:00:00 2001 From: Joe Groff Date: Mon, 14 Sep 2009 13:21:46 -0500 Subject: [PATCH 1/2] linux 32 typo --- vm/os-linux-x86.32.hpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/vm/os-linux-x86.32.hpp b/vm/os-linux-x86.32.hpp index 8fa7eff842..bd2315ccef 100644 --- a/vm/os-linux-x86.32.hpp +++ b/vm/os-linux-x86.32.hpp @@ -38,7 +38,7 @@ inline static void *ucontext_stack_pointer(void *uap) inline static unsigned int uap_fpu_status(void *uap) { ucontext_t *ucontext = (ucontext_t *)uap; - struct _fpstate *fpregs = (struct _fpstate *)uap->uc_mcontext.fpregs; + struct _fpstate *fpregs = (struct _fpstate *)ucontext->uc_mcontext.fpregs; if (fpregs->magic == X86_FXSR_MAGIC) return fpregs->sw | fpregs->mxcsr; else @@ -48,7 +48,7 @@ inline static unsigned int uap_fpu_status(void *uap) inline static void uap_clear_fpu_status(void *uap) { ucontext_t *ucontext = (ucontext_t *)uap; - struct _fpstate *fpregs = (struct _fpstate *)uap->uc_mcontext.fpregs; + struct _fpstate *fpregs = (struct _fpstate *)ucontext->uc_mcontext.fpregs; fpregs->sw = 0; if (fpregs->magic == X86_FXSR_MAGIC) fpregs->mxcsr &= 0xffffffc0; From 79505168cfddd38d01ae307529c1af7b1b3b9af9 Mon Sep 17 00:00:00 2001 From: Doug Coleman Date: Mon, 14 Sep 2009 13:47:37 -0500 Subject: [PATCH 2/2] faster number-length and some unit tests --- extra/project-euler/common/common-tests.factor | 17 +++++++++++++++++ extra/project-euler/common/common.factor | 7 ++++++- 2 files changed, 23 insertions(+), 1 deletion(-) create mode 100644 extra/project-euler/common/common-tests.factor diff --git a/extra/project-euler/common/common-tests.factor b/extra/project-euler/common/common-tests.factor new file mode 100644 index 0000000000..1f7a3668e2 --- /dev/null +++ b/extra/project-euler/common/common-tests.factor @@ -0,0 +1,17 @@ +! Copyright (C) 2009 Doug Coleman. +! See http://factorcode.org/license.txt for BSD license. +USING: tools.test project-euler.common ; +IN: project-euler.common.tests + +[ 4 ] [ -1000 number-length ] unit-test +[ 3 ] [ -999 number-length ] unit-test +[ 3 ] [ -100 number-length ] unit-test +[ 2 ] [ -99 number-length ] unit-test +[ 1 ] [ -9 number-length ] unit-test +[ 1 ] [ -1 number-length ] unit-test +[ 1 ] [ 0 number-length ] unit-test +[ 1 ] [ 9 number-length ] unit-test +[ 2 ] [ 99 number-length ] unit-test +[ 3 ] [ 100 number-length ] unit-test +[ 3 ] [ 999 number-length ] unit-test +[ 4 ] [ 1000 number-length ] unit-test diff --git a/extra/project-euler/common/common.factor b/extra/project-euler/common/common.factor index efec77355b..3d320fad62 100644 --- a/extra/project-euler/common/common.factor +++ b/extra/project-euler/common/common.factor @@ -76,7 +76,12 @@ PRIVATE> [ dup 0 = not ] [ 10 /mod ] produce reverse nip ; : number-length ( n -- m ) - log10 floor 1 + >integer ; + abs [ + 1 + ] [ + 1 0 [ 2over >= ] + [ [ 10 * ] [ 1 + ] bi* ] while 2nip + ] if-zero ; : nth-prime ( n -- n ) 1 - lprimes lnth ;