Bug in exponentiate ** operator precedence and associativity ?

Database

Bug in exponentiate ** operator precedence and associativity ?

Consider below query:

SELECT 2**3**4

as a result teradata returns value of expression 4096. This means that provided expression was calculated in this way:

//Teradata left associative (probably wrong):
((2**3)**4) = 4,096

But this is wrong !

When expression contains operators with same precedence then normally expression is evaluated from left - to right. But exponentiate operator is evaluated from right to left.

This means that presented expression should be evaluated in this way:

//Google and Mathematical theory says that 2**3**4 is right associative
(2**(3**4)) = 2,417,851,639,229,260,000,000,000

Try to evaluated this expression in for ex. google. Expression is evaluated from right to left. Also wikipedia describes this problem in this articel: http://en.wikipedia.org/wiki/Operator_associativity in same way as google evaluates this kind of expressions saying that operator is right associative.

Why Teradata is evaluating this operator from left to right ? Is it just a bug or intended behaviour?

1 REPLY
N/A

Re: Bug in exponentiate ** operator precedence and associativity ?

The manuals clearly specify the left-to-right order, so at least it's documented behaviour :-)

I tend to use brackets, so there's no gueass about order...

Btw, your expected result is wrong.

Google returns an approximate result, 2.4178516e+24, and (2**(3**4)) is actually not 2,417,851,639,229,260,000,000,000 (Teradata returns FLOATs for exponentiation) but 2,417,851,639,229,258,349,412,352.