From dadd5202a3ccfd8c03fb9eb60e6a15b0fb987672 Mon Sep 17 00:00:00 2001 From: Michal Idziorek Date: Sat, 23 May 2015 21:39:42 +0200 Subject: filesystem stuff and experimenting with userspace tasks --- userspace/task1.c | 43 ++++++++++++++++++++++++++++++++++++++++--- 1 file changed, 40 insertions(+), 3 deletions(-) (limited to 'userspace/task1.c') diff --git a/userspace/task1.c b/userspace/task1.c index d3706ee..d9875f4 100644 --- a/userspace/task1.c +++ b/userspace/task1.c @@ -1,11 +1,48 @@ -int main(int argc, char **argv) +typedef unsigned long long ULL; + +// a simple cache to speedup successive requests! +static ULL fib1_cached_index=0; +static ULL fib1_cached_value=0; + +static ULL fib2_cached_index=1; +static ULL fib2_cached_value=1; + + +ULL fib(ULL i) { - signed int i=0; + if(i==0)return 0; + if(i==1)return 1; + if(i==fib1_cached_index)return fib1_cached_value; + if(i==fib2_cached_index)return fib2_cached_value; + + ULL value=fib(i-1)+fib(i-2); + + fib1_cached_index=fib2_cached_index; + fib1_cached_value=fib2_cached_value; + + fib2_cached_index=i; + fib2_cached_value=value; + + return value; +} + + + +int main(unsigned int argc, char **argv) +{ + ULL i=0; while(1) { i++; - printf("task 1 : %i \n",i); + + fib(i); //precalc + + // this will exhaust the stack so we call fib every time above + #ifdef __linux__ + if((i%100000000)==1)printf("gcc-fibonacci(%llu) = %llu \n",i,fib(i)); + #endif + if((i%100000000)==1)printf("fibonacci(%u...) = %u... \n",(unsigned)i,(unsigned)fib(i)); } return 0; -- cgit v1.2.3