[gcalctool/gcalctool-newui2] support log base n
- From: Robert Ancell <rancell src gnome org>
- To: svn-commits-list gnome org
- Subject: [gcalctool/gcalctool-newui2] support log base n
- Date: Wed, 15 Jul 2009 01:30:52 +0000 (UTC)
commit 4f3b0e70b81ff2d3b7e13c2e3a62a8c1af9604ab
Author: Robert Ancell <robert ancell gmail com>
Date: Wed Jul 15 11:30:20 2009 +1000
support log base n
src/mp-equation.c | 31 +++++++++++++++++++++++++++++--
1 files changed, 29 insertions(+), 2 deletions(-)
---
diff --git a/src/mp-equation.c b/src/mp-equation.c
index 0ff8d58..22293ca 100644
--- a/src/mp-equation.c
+++ b/src/mp-equation.c
@@ -39,7 +39,7 @@ get_variable(MPEquationParserState *state, const char *name, MPNumber *z)
lower_name = strdup(name);
for (c = lower_name; *c; c++)
*c = tolower(*c);
-
+
if (lower_name[0] == 'r')
mp_set_from_mp(register_get_value(atoi(name+1)), z);
else if (strcmp(lower_name, "ans") == 0)
@@ -69,6 +69,23 @@ set_variable(MPEquationParserState *state, const char *name, MPNumber *x)
// letters+numbers = numbers+letters+numbers = function
+static int sub_atoi(const char *data)
+{
+ int i, value = 0;
+ const char *digits[] = {"â??", "â??", "â??", "â??", "â??", "â??", "â??", "â??", "â??", "â??", NULL};
+
+ do {
+ for(i = 0; digits[i] != NULL && strncmp(data, digits[i], strlen(digits[i])) != 0; i++);
+ if(digits[i] == NULL)
+ return -1;
+ data += strlen(digits[i]);
+ value = value * 10 + i;
+ } while(*data != '\0');
+
+ return value;
+}
+
+
static int
get_function(MPEquationParserState *state, const char *name, const MPNumber *x, MPNumber *z)
{
@@ -82,7 +99,17 @@ get_function(MPEquationParserState *state, const char *name, const MPNumber *x,
// FIXME: Re Im ?
if (strcmp(lower_name, "log") == 0)
- mp_logarithm(10, x, z);
+ mp_logarithm(10, x, z); // FIXME: Default to ln
+ else if (strncmp(lower_name, "log", 3) == 0) {
+ int base;
+
+ base = sub_atoi(lower_name + 3);
+ printf("%d\n", base);
+ if (base < 0)
+ result = 0;
+ else
+ mp_logarithm(base, x, z);
+ }
else if (strcmp(lower_name, "ln") == 0)
mp_ln(x, z);
else if (strcmp(lower_name, "sqrt") == 0) // â??x
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]