Hey mathematicians, why is (odd integer) root of a negative number undefined behaviour?
_____ ³√-27 = -3 ? -3 · -3 = 9 9 · -3 = -27
Edited by gasto, 02 April 2014 - 09:47 AM.
Subscribe to GameDev.net Direct to receive the latest updates and exclusive content.
Guest, the last post of this topic is over 60 days old and at this point you may not reply in this topic. If you wish to continue this conversation start a new topic.
Posted 02 April 2014 - 09:56 AM
Why do you say it's undefined? My desktop calculator works fine with odd roots of negative numbers.
EDIT: FYI, you posted in the Math & Physics forum. Do you perhaps have a programming question, instead?
Edited by Buckeye, 02 April 2014 - 10:58 AM.
Please don't PM me with questions. Post them in the forums for everyone's benefit, and I can embarrass myself publicly.
You don't forget how to play when you grow old; you grow old when you forget how to play.
Posted 02 April 2014 - 10:02 AM
What is the context of the undefined behavior? Particular program or language? Calculator?
"I can't believe I'm defending logic to a turing machine." - Kent Woolworth [Other Space]
Posted 02 April 2014 - 10:41 AM
If you're using a software to compute it and it answers undefined, maybe it has a bug. Check this post: http://math.stackexchange.com/questions/25528/cubic-root-of-negative-numbers
Even Wolfram Alpha had a bug because of other possible answers (complex numbers), but it looks like now it shows you the real one and there's an option to check the complex ones too.
Posted 02 April 2014 - 11:58 AM
Hey mathematicians, why is (odd integer) root of a negative number undefined behaviour?
_____ ³√-27 = -3 ? -3 · -3 = 9 9 · -3 = -27
Is this becoming a hobby of yours? You ask why something is not the way it should be, but it actually IS the way it should be. You can initialize multi-dimensional arrays in C or C++ to zero by specifying only the first element, and the odd-integer root of a negative number is perfectly well defined.
Posted 02 April 2014 - 06:34 PM
It is a problem of the Windows Vista Calculator then. In Windows 7 it works perfectly.
Just out of curiosity, try: (-27)^(1/3) in the calculator to see if you get an answer.
“We should forget about small efficiencies, say about 97% of the time; premature optimization is the root of all evil” - Donald E. Knuth, Structured Programming with go to Statements
"First you learn the value of abstraction, then you learn the cost of abstraction, then you're ready to engineer" - Ken Beck, Twitter
Posted 02 April 2014 - 07:13 PM
Edited by Nypyren, 02 April 2014 - 07:19 PM.
Posted 03 April 2014 - 06:14 AM
Good old Windows calculator:
Posted 03 April 2014 - 08:26 AM
It is a problem of the Windows Vista Calculator then. In Windows 7 it works perfectly.
Just out of curiosity, try: (-27)^(1/3) in the calculator to see if you get an answer.
I get the same "invalid value" message. I used 0,333333333333333333333333333333 instead of 1/3 (since otherwise it would raise it to the first and then divide by three)
(or the new "y root x" button if you have a new enough version)
If you check the gif I linked to, there is no "y root of x" option.
Posted 03 April 2014 - 08:36 AM
instead of 1/3 (since otherwise it would raise it to the first and then divide by three)
Either you're not using parentheses correctly, or your calculator is badly broken. Parenthetical expressions are evaluated first and the calculation should reduce to -27^{0.333..}
Please don't PM me with questions. Post them in the forums for everyone's benefit, and I can embarrass myself publicly.
You don't forget how to play when you grow old; you grow old when you forget how to play.
Posted 03 April 2014 - 09:44 AM
It is a problem of the Windows Vista Calculator then. In Windows 7 it works perfectly.
Just out of curiosity, try: (-27)^(1/3) in the calculator to see if you get an answer.
That won't work. If you compute 1/3 as a floating-point number it will be rounded to some fraction with a power of 2 in the denominator, and now -27 raised to that power won't be a real number.
In C99 and C++11 you have the function `cbrt', which will give you the correct value, but if you use `pow', you'll get `nan'.
Edited by Álvaro, 03 April 2014 - 02:18 PM.
Posted 03 April 2014 - 12:14 PM
That won't work
Actually it does in Windows 7's calculator. Windows calculator uses arbitrary precision numbers or it just performs symbolic optimization.
Regardless, I hadn't thought about floating point issues when doing the cubic root of a number in C++,so I am glad you pointed out that converting roots to powers is not a good idea when it comes to negative numbers, as a rule
Edited by Javier Meseguer de Paz, 03 April 2014 - 12:14 PM.
“We should forget about small efficiencies, say about 97% of the time; premature optimization is the root of all evil” - Donald E. Knuth, Structured Programming with go to Statements
"First you learn the value of abstraction, then you learn the cost of abstraction, then you're ready to engineer" - Ken Beck, Twitter
Guest, the last post of this topic is over 60 days old and at this point you may not reply in this topic. If you wish to continue this conversation start a new topic.
GameDev.net™, the GameDev.net logo, and GDNet™ are trademarks of GameDev.net, LLC.