function without arithematic operator 
November 15th, 2005, 01:31 AM
| | | |
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 | 
November 15th, 2005, 01:31 AM
| | | | 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 | 
November 15th, 2005, 01:31 AM
| | | | 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> | 
November 15th, 2005, 01:31 AM
| | | | 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++ | 
November 15th, 2005, 01:31 AM
| | | | 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 | 
November 15th, 2005, 01:31 AM
| | | | 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 | 
November 15th, 2005, 01:32 AM
| | | | 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 | 
November 15th, 2005, 01:32 AM
| | | | 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. |  | | | | /bytes/about
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 225,720 network members.
|