Database

turn on suggestions

Auto-suggest helps you quickly narrow down your search results by suggesting possible matches as you type.

Showing results for

- Mark as New
- Bookmark
- Subscribe
- Subscribe to RSS Feed
- Get Direct Link
- Email to a Friend
- Report Inappropriate Content

03-23-2015
05:02 AM

03-23-2015
05:02 AM

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

- Mark as New
- Bookmark
- Subscribe
- Subscribe to RSS Feed
- Get Direct Link
- Email to a Friend
- Report Inappropriate Content

03-23-2015
05:31 AM

03-23-2015
05:31 AM

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**.