[gcalctool] Optimise Pi and Euler's number calculation
- From: Robert Ancell <rancell src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gcalctool] Optimise Pi and Euler's number calculation
- Date: Fri, 28 Jan 2011 06:54:17 +0000 (UTC)
commit a16adf4f6ecae340195de1f080d6335dac43bc57
Author: Robert Ancell <robert ancell canonical com>
Date: Fri Jan 28 15:33:42 2011 +1000
Optimise Pi and Euler's number calculation
src/mp-trigonometric.c | 9 ++++++++-
src/mp.c | 13 ++++++++++---
2 files changed, 18 insertions(+), 4 deletions(-)
---
diff --git a/src/mp-trigonometric.c b/src/mp-trigonometric.c
index f4cc8bb..f3efc38 100644
--- a/src/mp-trigonometric.c
+++ b/src/mp-trigonometric.c
@@ -25,6 +25,9 @@
#include "mp.h"
#include "mp-private.h"
+static MPNumber pi;
+static gboolean have_pi = FALSE;
+
static int
mp_compare_mp_to_int(const MPNumber *x, int i)
{
@@ -64,7 +67,11 @@ convert_to_radians(const MPNumber *x, MPAngleUnit unit, MPNumber *z)
void
mp_get_pi(MPNumber *z)
{
- mp_set_from_string("3.1415926535897932384626433832795028841971693993751058209749445923078164062862089986280348253421170679", 10, z);
+ if (mp_is_zero(&pi)) {
+ mp_set_from_string("3.1415926535897932384626433832795028841971693993751058209749445923078164062862089986280348253421170679", 10, &pi);
+ have_pi = TRUE;
+ }
+ mp_set_from_mp(&pi, z);
}
diff --git a/src/mp.c b/src/mp.c
index 798b1b0..210dfb3 100644
--- a/src/mp.c
+++ b/src/mp.c
@@ -25,6 +25,9 @@
#include "mp.h"
#include "mp-private.h"
+static MPNumber eulers_number;
+static gboolean have_eulers_number = FALSE;
+
// FIXME: Re-add overflow and underflow detection
char *mp_error = NULL;
@@ -101,9 +104,13 @@ mp_ext(int i, int j, MPNumber *x)
void
mp_get_eulers(MPNumber *z)
{
- MPNumber t;
- mp_set_from_integer(1, &t);
- mp_epowy(&t, z);
+ if (!have_eulers_number) {
+ MPNumber t;
+ mp_set_from_integer(1, &t);
+ mp_epowy(&t, &eulers_number);
+ have_eulers_number = TRUE;
+ }
+ mp_set_from_mp(&eulers_number, z);
}
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]