Re: evaluation path for x^y ?



  
all ok, me bad, think I found it, was a misunderstanding of the branching / switch logic in 
src/expr.c/bin_arith/GNM_EXPR_OP_EXP.  
   
searched for but couldn't find a discussion / decision if below would be meaningful for gnumeric ... 

think gnumeric's 'three argument notation' for 'power' is more clear, but we c/should additional implement 
evaluation as in LO Calc ( and Excel? ),  
  
LO Calc: '=(-8)^(1/3)' -> '-2',  
  
they implemented it a few years ago reg. "It leads to incompatibility with MS Excel and thus, to difficulties 
in migration.".  
  
gnumeric: '=(-8)^(1/3)' -> '#NUM!'  
  
I tried the following:  
  
in 'power':  
    1. check if '1 / y' is integer,  
    2. check if z is 1,  
    3. check if '1 / y' is odd integer,  
    if all three yes: calculate and return '- pow( - x, y )',  
  
similar in GNM_EXPR_EXP,  
    first step don't sort out to ERR if above conditions 1. and 3. match,  
    second calculate and return '- pow( - va, vb )',  
  
that's not 'complete', e.g. for power it could be better to evaluate 1 / y even when z <> 1 ?? and possibly 
it's good to evaluate negative fractional exponents too? or even evaluate things like '=(-8)^(**2**/3)' ( 
'square of third root from minus eight', or 'third root from minus eight squared' )? it's just a short test 
if it works in general, and if it harms other calculations, gnumeric test-suite seems clean.  
  
Best Regards,  
  
b.  
  
( for those who like to think about meaningfulness: in mathematics roots are not unary, already sqrt( 4 ) has 
two solutions { 2, -2 }, spreadsheets tend to prefer the simplest one which matches the first thought of 
'normal people'. the problem of roots from negative is solved by complex numbers in math, for 'odd integer 
roots' there should be one root with only a real part, that would match 'simple minded users' expectations, 
thinking about complex values as result would probably exceed the capa of some such users ...  
  
---

hello @all,

for private fun, Calc / Excel compatibility and easier cross-system-testing I'd like to implement evaluation 
of '= (-8)^(1/3)' -> '-2'.

I managed it for 'power' ( by patching goffice and plugins/fn-math/functions, but despite 'EXPR_OP_EXP' seems 
piped through gnm_power it still produces #NUM!.

can anyone describe the code path for '^' or assume where I might be wrong?

TIA for any help.

P.S. I do not want to start a discussion if odd roots from negative are 'good', allowed or mathematical 
correct ... the web is full of such ...


[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]