[gnumeric] transform r.qbinom to binom.inv even for more than 3 arguments in xlsx export
- From: Andreas J. Guelzow <guelzow src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gnumeric] transform r.qbinom to binom.inv even for more than 3 arguments in xlsx export
- Date: Mon, 24 Jun 2013 20:06:11 +0000 (UTC)
commit 4d6693336778c4fdca2c85c882eb7d21bb69296d
Author: Andreas J Guelzow <aguelzow pyrshep ca>
Date: Mon Jun 24 14:02:31 2013 -0600
transform r.qbinom to binom.inv even for more than 3 arguments in xlsx export
2013-06-24 Andreas J. Guelzow <aguelzow pyrshep ca>
* xlsx-utils.c (xlsx_func_binominv_output_handler):
translate the expression even for more than 3 arguments
plugins/excel/ChangeLog | 5 ++++
plugins/excel/xlsx-utils.c | 50 +++++++++++++++++++++++++++++++++++--------
2 files changed, 45 insertions(+), 10 deletions(-)
---
diff --git a/plugins/excel/ChangeLog b/plugins/excel/ChangeLog
index 7fd954f..0ddd143 100644
--- a/plugins/excel/ChangeLog
+++ b/plugins/excel/ChangeLog
@@ -1,3 +1,8 @@
+2013-06-24 Andreas J. Guelzow <aguelzow pyrshep ca>
+
+ * xlsx-utils.c (xlsx_func_binominv_output_handler):
+ translate the expression even for more than 3 arguments
+
2013-06-22 Andreas J. Guelzow <aguelzow pyrshep ca>
* xlsx-utils.c (xlsx_func_floor_output_handler): new
diff --git a/plugins/excel/xlsx-utils.c b/plugins/excel/xlsx-utils.c
index 374382b..5ed1820 100644
--- a/plugins/excel/xlsx-utils.c
+++ b/plugins/excel/xlsx-utils.c
@@ -209,25 +209,55 @@ xlsx_func_binominv_handler (G_GNUC_UNUSED GnmConventions const *convs, G_GNUC_UN
return gnm_expr_new_funcall (f, args);
}
+
static gboolean
xlsx_func_binominv_output_handler (GnmConventionsOut *out, GnmExprFunction const *func)
-/* R.QBINOM(c,a,b) --> BINOM.INV(a,b,c) */
{
+#define OUTPUT_BINOM_INV(pre,post) g_string_append (target, "_xlfn.BINOM.INV("); \
+ gnm_expr_as_gstring (ptr[1], out);\
+ g_string_append_c (target, ',');\
+ gnm_expr_as_gstring (ptr[2], out);\
+ g_string_append (target, pre);\
+ gnm_expr_as_gstring (ptr[0], out);\
+ g_string_append (target, post)
+
+ GnmExprConstPtr const *ptr = func->argv;
+ GString *target = out->accum;
+
if (func->argc == 3) {
- GString *target = out->accum;
- GnmExprConstPtr const *ptr = func->argv;
- g_string_append (target, "_xlfn.BINOM.INV(");
- gnm_expr_as_gstring (ptr[1], out);
- g_string_append_c (out->accum, ',');
- gnm_expr_as_gstring (ptr[2], out);
- g_string_append_c (out->accum, ',');
- gnm_expr_as_gstring (ptr[0], out);
- g_string_append_c (out->accum, ')');
+ /* R.QBINOM(c,a,b) --> BINOM.INV(a,b,c) */
+ OUTPUT_BINOM_INV (",",")");
+ return TRUE;
+ } else if (func->argc == 4) {
+ /* R.QBINOM(c,a,b,d) --> if(d,binom.inv(a,b,c), binom.inv(a,b,1-c)) */
+ g_string_append (target, "if(");
+ gnm_expr_as_gstring (ptr[3], out);
+ g_string_append (target, ",");
+ OUTPUT_BINOM_INV(",","),");
+ OUTPUT_BINOM_INV(",1-","))");
+ return TRUE;
+ } else if (func->argc == 5) {
+ /* R.QBINOM(c,a,b,d,e) -->
+ if(d,if(e,binom.inv(a,b,exp(c)),binom.inv(a,b,c)),
+ if(e,binom.inv(a,b,1-exp(c)),binom.inv(a,b,1-c)))*/
+ g_string_append (target, "if(");
+ gnm_expr_as_gstring (ptr[3], out);
+ g_string_append (target, ",if(");
+ gnm_expr_as_gstring (ptr[4], out);
+ g_string_append (target, ",");
+ OUTPUT_BINOM_INV(",exp(",")),");
+ OUTPUT_BINOM_INV(",",")),if(");
+ gnm_expr_as_gstring (ptr[4], out);
+ g_string_append (target, ",");
+ OUTPUT_BINOM_INV(",1-exp(",")),");
+ OUTPUT_BINOM_INV(",1-",")))");
return TRUE;
}
return FALSE;
+#undef OUTPUT_BINOM_INV
}
+
static gboolean
xlsx_func_chisqinv_output_handler (GnmConventionsOut *out, GnmExprFunction const *func)
/* R.QCHISQ(a,b) --> CHISQ.INV(a,b) */
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]