469,578 Members | 1,869 Online

# Trouble calculating 5th root of a given number using C

Hi Friends

Please help me to write a C program to find the 5th (fifth) root of a given number.
Ex:(1) Input : 32
Output : 5th root of 32 is 2

Ex:(1) Input : 243
Output : 5th root of 243 is 3

Regards
Kishor
Nov 14 '05 #1
13 11516

"Kishor" <na***********@rediffmail.com> wrote in message
Hi Friends

Please help me to write a C program to find the 5th (fifth) root of a given number. Ex:(1) Input : 32
Output : 5th root of 32 is 2

Ex:(1) Input : 243
Output : 5th root of 243 is 3

Regards
Kishor

Is one allowed to use the standard math.h ?
If so, then
double result = pow(32, 1/5);
should give you 2.0
Allan
Nov 14 '05 #2
Allan Bruce wrote:

"Kishor" <na***********@rediffmail.com> wrote in message
Hi Friends

Please help me to write a C program to find the 5th (fifth) root of a given number.
Ex:(1) Input : 32
Output : 5th root of 32 is 2

Ex:(1) Input : 243
Output : 5th root of 243 is 3

Strengths.

I ran some of the code there through the DS9K, and now there are nasal
demons all over the place :-)

Regards
Kishor

Is one allowed to use the standard math.h ?
If so, then
double result = pow(32, 1/5);
should give you 2.0

Fortunately, it gives me 1.0 as expected :-) Perhaps you meant this?:

double result = pow(32, 1/5.);

-nrk.
Allan

--
Remove devnull for email
Nov 14 '05 #3
"Allan Bruce" <al*****@TAKEAWAYf2s.com> wrote in message
news:bv**********@news.freedom2surf.net...
"Kishor" <na***********@rediffmail.com> wrote in message
Hi Friends

given number.
Ex:(1) Input : 32
Output : 5th root of 32 is 2

Ex:(1) Input : 243
Output : 5th root of 243 is 3

Strengths.

Regards
Kishor

Is one allowed to use the standard math.h ?
If so, then
double result = pow(32, 1/5);
should give you 2.0

Or 1.0 at the very least. Try 1.0/5.0.

This approach is good enough for a homework assignment,
but not industrial strength.

P.J. Plauger
Dinkumware, Ltd.
http://www.dinkumware.com
Nov 14 '05 #4
P.J. Plauger writes:
Or 1.0 at the very least. Try 1.0/5.0.

This approach is good enough for a homework assignment,
but not industrial strength.

I take it for granted that you are right. But what would you recommend for
someone who does not wish to make this a life's work?
Nov 14 '05 #5
Kishor wrote:
Hi Friends

Please help me to write a C program to find the 5th (fifth) root of a given number.
Ex:(1) Input : 32
Output : 5th root of 32 is 2

Ex:(1) Input : 243
Output : 5th root of 243 is 3

#include <stdio.h>
#include <stdlib.h>
#include <math.h>
#include <time.h>
#include <float.h>

inline double root(double x)
{
return pow(x, 0.2);
}
inline double original(double x)
{
return pow(x, 5.);
}

int main(void)
{
size_t pass;
const size_t maxpass = 10;
double x;
const double upperlimit = 1000.;
srand((unsigned) time(0));
for (pass = 0; pass < maxpass; pass++) {
x = upperlimit * rand() / (1. + RAND_MAX);
printf("number: %.*g\n", DBL_DIG, x);
printf("5th root: %.*g\n", DBL_DIG, x = root(x));
printf("root to 5th power: %.*g\n\n", DBL_DIG, original(x));
}
return 0;
}

number: 349.126742687076
5th root: 3.22549685893672
root to 5th power: 349.126742687076

number: 933.513863012195
5th root: 3.92666773917324
root to 5th power: 933.513863012195

number: 337.094322778285
5th root: 3.20295094809955
root to 5th power: 337.094322778285

number: 921.04862164706
5th root: 3.91612469036527
root to 5th power: 921.04862164706

number: 193.956033326685
5th root: 2.86774584184895
root to 5th power: 193.956033326685

number: 536.526418756694
5th root: 3.51494247913713
root to 5th power: 536.526418756694

number: 769.721171818674
5th root: 3.77804117237769
root to 5th power: 769.721171818674

number: 245.490406174213
5th root: 3.00612409691297
root to 5th power: 245.490406174213

number: 818.889678921551
5th root: 3.82512013459173
root to 5th power: 818.889678921551

number: 422.267477028072
5th root: 3.35056098160768
root to 5th power: 422.267477028072

--
Martin Ambuhl
Nov 14 '05 #6
Allan Bruce wrote:

Is one allowed to use the standard math.h ?
If so, then
double result = pow(32, 1/5);
should give you 2.0

Bullshit. It yields 1.0

--
Martin Ambuhl
Nov 14 '05 #7
On Mon, 02 Feb 2004 18:45:09 GMT, Martin Ambuhl <ma*****@earthlink.net> wrote:
Allan Bruce wrote:

Is one allowed to use the standard math.h ?
If so, then
double result = pow(32, 1/5);
should give you 2.0

Bullshit. It yields 1.0

Forgive me if I misunderstand, but could someone explain to me what value 32^0
is? If I read the statement
double result = pow(32, 1/5);

correctly, that's what the statement is computing.

--
Lew Pitcher
IT Consultant, Enterprise Technology Solutions
Toronto Dominion Bank Financial Group

(Opinions expressed are my own, not my employers')
Nov 14 '05 #8
Lew Pitcher <Le*********@td.com> spoke thus:
Forgive me if I misunderstand, but could someone explain to me what value 32^0
is? If I read the statement
double result = pow(32, 1/5);

correctly, that's what the statement is computing.

You're reading it correctly. 32 (or any number other than 0) raised
to the zero power gives 1.

--
Christopher Benson-Manica | I *should* know what I'm talking about - if I
ataru(at)cyberspace.org | don't, I need to know. Flames welcome.
Nov 14 '05 #9

"Martin Ambuhl" <ma*****@earthlink.net> wrote in message
Allan Bruce wrote:

Is one allowed to use the standard math.h ?
If so, then
double result = pow(32, 1/5);
should give you 2.0

Bullshit. It yields 1.0

double result = pow(32.0, 1/5.0);

Nov 14 '05 #10
Christopher Benson-Manica wrote:
32 (or any number other than 0) raised to the zero power gives 1.

http://mathworld.wolfram.com/ExponentLaws.html

The definition 0^0=1 is sometimes used to simplify
formulas, but it should be kept in mind that this
equality is a definition and not a fundamental
mathematical truth (Knuth 1992; Knuth 1997, p. 56).

<g>

Nov 14 '05 #11
Grumble wrote:
Christopher Benson-Manica wrote:
32 (or any number other than 0) raised to the zero power gives 1.

http://mathworld.wolfram.com/ExponentLaws.html

The definition 0^0=1 is sometimes used to simplify
formulas, but it should be kept in mind that this
equality is a definition and not a fundamental
mathematical truth

That's quite a weird statement, if you think about it. I know it's not
your statement but Mathworld's, but still.

To my surprise (and to get on-topic), C99 doesn't really say what
pow(0.0, 0.0) should be:

"The pow functions compute x raised to the power y. A domain error
occurs if x is finite and negative and y is finite and not an integer
value. A domain error may occur if x is zero and y is less than or equal
to zero. A range error may occur."
(Knuth 1992; Knuth 1997, p. 56).

Knuth Vol 1, third edition, seems to be giving more info on binomials
than I could ever care to know on page 56, but nothing about exponentials.

Best regards,

Sidney

Nov 14 '05 #12

To my surprise (and to get on-topic), C99 doesn't really say what
pow(0.0, 0.0) should be:

It does in Annex F (for IEEE floating-point).

-Larry Jones

Summer vacation started! I can't be sick! -- Calvin
Nov 14 '05 #13
la************@ugsplm.com wrote:
To my surprise (and to get on-topic), C99 doesn't really say what
pow(0.0, 0.0) should be:

It does in Annex F (for IEEE floating-point).

So I see! F.9.4.4:

"pow(x,±0) returns 1 for any x, even a NaN."

The NaN clause is a surprise, to me at least.

Thanks and regards,

Sidney

Nov 14 '05 #14

### This discussion thread is closed

Replies have been disabled for this discussion.