Connecting Tech Pros Worldwide Help | Site Map

function without arithematic operator

 
LinkBack Thread Tools Search this Thread
  #1  
Old November 15th, 2005, 12:31 AM
rahul8143@gmail.com
Guest
 
Posts: n/a
Default function without arithematic operator

hello,
Is it possible to write a math library function sqrt in C without
arithmatic operators(*,+)?
can anyone give me hints to do that?
regards,
rahul


  #2  
Old November 15th, 2005, 12:31 AM
Ben Pfaff
Guest
 
Posts: n/a
Default Re: function without arithematic operator

rahul8143@gmail.com writes:
[color=blue]
> Is it possible to write a math library function sqrt in C without
> arithmatic operators(*,+)?[/color]

There is no good reason to do so.
--
"If I've told you once, I've told you LLONG_MAX times not to
exaggerate."
--Jack Klein
  #3  
Old November 15th, 2005, 12:31 AM
Kenneth Brody
Guest
 
Posts: n/a
Default Re: function without arithematic operator

rahul8143@gmail.com wrote:[color=blue]
>
> hello,
> Is it possible to write a math library function sqrt in C without
> arithmatic operators(*,+)?
> can anyone give me hints to do that?[/color]

Use division and subtraction instead. :-)

Of course, there are only two reasons to do so that I can think of:

(1) A nonsensical homework assignment.
(2) A troll.

--
+-------------------------+--------------------+-----------------------------+
| Kenneth J. Brody | www.hvcomputer.com | |
| kenbrody/at\spamcop.net | www.fptech.com | #include <std_disclaimer.h> |
+-------------------------+--------------------+-----------------------------+
Don't e-mail me at: <mailto:ThisIsASpamTrap@gmail.com>


  #4  
Old November 15th, 2005, 12:31 AM
Anonymous 7843
Guest
 
Posts: n/a
Default Re: function without arithematic operator

In article <1122991677.514736.32910@z14g2000cwz.googlegroups. com>,
<rahul8143@gmail.com> wrote:[color=blue]
>
>
> hello,
> Is it possible to write a math library function sqrt in C without
> arithmatic operators(*,+)?
> can anyone give me hints to do that?
> regards,
> rahul[/color]

If it's in the math library it doesn't have to be implemented
in C, so if the processor has a sqrt instruction you can just
use that. That's cheating (kind of) because it's likely that the
processor itself will do operations similar to * and + in order
to execute.

exp(log(x)/2.0) is workable, but divide is an arithmetic
operator, and although you didn't specifically mention it in
your list and I can't tell from your words whether the list
is meant to be exhaustive or to exemplify. Again, exp and
log are likely to do some arithmetic operations behind
the scenes.

It's _probably_ possible to use shifts and bitwise operations
to implement an integer sqrt function. Another integer-only
solution would be something really lame like:

int sqrt(int x)
{
if (x < 4) return 1;
if (x < 9) return 2;
if (x < 16) return 3;
if (x < 25) return 4;
if (x < 36) return 5;
/* and so on, up to sqrt(INT_MAX) */
}

But perhaps you have handed in your homework by now and nothing
I have said is helpful.
--
7842++
  #5  
Old November 15th, 2005, 12:31 AM
Charles M. Reinke
Guest
 
Posts: n/a
Default Re: function without arithematic operator

"Anonymous 7843" <anon7843@example.com> wrote in message
news:uhPHe.27079$HV1.5748@fed1read07...[color=blue]
> In article <1122991677.514736.32910@z14g2000cwz.googlegroups. com>,
> <rahul8143@gmail.com> wrote:[color=green]
> >
> >
> > hello,
> > Is it possible to write a math library function sqrt in C without
> > arithmatic operators(*,+)?
> > can anyone give me hints to do that?
> > regards,
> > rahul[/color]
>
> If it's in the math library it doesn't have to be implemented
> in C, so if the processor has a sqrt instruction you can just
> use that. That's cheating (kind of) because it's likely that the
> processor itself will do operations similar to * and + in order
> to execute.
>
> exp(log(x)/2.0) is workable, but divide is an arithmetic
> operator, and although you didn't specifically mention it in
> your list and I can't tell from your words whether the list
> is meant to be exhaustive or to exemplify. Again, exp and
> log are likely to do some arithmetic operations behind
> the scenes.
>
> It's _probably_ possible to use shifts and bitwise operations
> to implement an integer sqrt function. Another integer-only
> solution would be something really lame like:
>
> int sqrt(int x)
> {
> if (x < 4) return 1;
> if (x < 9) return 2;
> if (x < 16) return 3;
> if (x < 25) return 4;
> if (x < 36) return 5;
> /* and so on, up to sqrt(INT_MAX) */
> }
>
> But perhaps you have handed in your homework by now and nothing
> I have said is helpful.[/color]

The code below uses an iterative algorithm to calculate the sqrt of a
double, without any addition or multiplication operations (although
subtraction and division are both used). Comments are welcome.

#include <stdio.h>
#include <stdlib.h>

#define FLIP_SGN(x) -x

double my_abs(double x) {
if(x<0)
return FLIP_SGN(x);
else
return x;
} /* my_abs */

double my_sqrt(double x) {
double ans=0, guess=x, error=1e-12, error2;
int count=0;
error2 = my_abs(ans-guess);

while(error2>error){
ans = (guess-x/FLIP_SGN(guess)) / 2.0; /* Newton's method approximation
*/
error2 = my_abs(ans-guess);
guess = ans;
count--;
} /* while */
printf("Calculated in %d iterations\n", FLIP_SGN(count));

return ans;
} /* my_sqrt */

int main(int argc, char **argv) {
int imag=0;
char *str_test;
double x, ans;

if(argc>1) {
x = strtod(argv[1], &str_test);
if(argv[1]!=str_test) {
if(x<0) {
imag = 1;
x = FLIP_SGN(x);
} /* if */
ans = my_sqrt(x);
if(imag)
printf("sqrt(%f) = %.10fi\n", FLIP_SGN(x), ans);
else
printf("sqrt(%f) = %.10f\n", x, ans);
} /* if */
else
printf("ERROR: Improper input provided; exiting!\n");
} /* if */
else
printf("ERROR: No input provided; exiting!\n");

return 0;
} /* main */
[color=blue]
>gcc -Wall -ansi -pedantic -lm -o my_sqrt my_sqrt.c
>my_sqrt -45.9314[/color]
Calculated in 8 iterations
sqrt(-45.931400) = 6.7772708371i

-Charles


  #6  
Old November 15th, 2005, 12:31 AM
Alan Balmer
Guest
 
Posts: n/a
Default Re: function without arithematic operator

On 2 Aug 2005 07:07:57 -0700, rahul8143@gmail.com wrote:
[color=blue]
>hello,
>Is it possible to write a math library function sqrt in C without
>arithmatic operators(*,+)?
>can anyone give me hints to do that?
>regards,
>rahul[/color]
exp(log(n)/2);

is probably one of the least efficient ways.

--
Al Balmer
Balmer Consulting
removebalmerconsultingthis@att.net
  #7  
Old November 15th, 2005, 12:32 AM
pete
Guest
 
Posts: n/a
Default Re: function without arithematic operator

Kenneth Brody wrote:[color=blue]
>
> rahul8143@gmail.com wrote:[color=green]
> >
> > hello,
> > Is it possible to write a math library function sqrt in C without
> > arithmatic operators(*,+)?
> > can anyone give me hints to do that?[/color]
>
> Use division and subtraction instead. :-)
>
> Of course, there are only two reasons to do so that I can think of:
>
> (1) A nonsensical homework assignment.
> (2) A troll.[/color]

#include <errno.h>
#include <math.h>

double sqrt(double x)
{
if (x > 0) {
const double a = x;
double b = a / 2 - -0.5;

do {
x = b;
b = (a / x - -x) / 2;
} while (x > b);
} else {
if (0 > x) {
errno = EDOM;
x = -HUGE_VAL;
}
}
return x;
}

--
pete
  #8  
Old November 15th, 2005, 12:32 AM
utque
Guest
 
Posts: n/a
Default Re: function without arithematic operator

You can also use SQR function to do that.(If SQR is not an arithmetic
operator)
while not (answer)
{
i++;
if(i>number){
answer=true;
}
}

you can also calculate the decimals with a small improvement.

 

Bookmarks

Thread Tools Search this Thread
Search this Thread:

Advanced Search

Posting Rules
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code is On
Smilies are On
[IMG] code is Off
HTML code is Off
Trackbacks are On
Pingbacks are On
Refbacks are On

Popular Articles

What is Bytes?

We are a network of experts and professionals in IT and software development that help one another with answers to tough questions and share insights. Get the best answers to your questions from over 220,662 network members.