On Sun, 2011-04-03 at 00:13 +0100, Ian Malone wrote: > On 1 April 2011 23:29, les <hlhowell@xxxxxxxxxxx> wrote: > > First let me say, that while I have used C++ I don't normally use it for > > my work and so am not throughly familiar with what it does, so if this > > is due to a C++ error, please be gentle. > > > > I am working on some DSP code I developed a long time ago, and now want > > to port it to 64 bit. I have read several articles on the differences > > in C and C++ between 32 and 64 bit, but this has me stymied. > > > > Here is the smallest sample I have been working with to show the current > > error: > > > > #include <math.h> > > #include <stdlib.h> > > #include <stdio.h> > > #include <string.h> > > > > main() > > { > > long double temp; > > printf ("M_PI=%e\n",M_PI); > > printf ("sin 90 = %e\n",sinf(M_PI/2)); > > temp=M_PI/2.0; > > // the following line won't compile for temp > > // regardless of how temp is declared (float, double, long double) > > // printf ("sin 90 = %e\n",sinf(temp)); > > } > > > > > > Clearly sinf is recognized, and compiles and runs. It returns 1.000 as > > expected for M_PI/2. But the line that is commented out will not > > compile. > > > > If you can see the issue here, please let me know. > > > > > yum info GCC shows: > > Name : gcc > > Arch : x86_64 > > Version : 4.5.1 > > Release : 4.fc14 > > > > F13 here: > Name : gcc > Arch : x86_64 > Version : 4.4.5 > Release : 2.fc13 > > How are you compiling it? If I uncomment the last printf then compile like: > $ g++ test.cc -Wall -o test > > I get: > test.cc:6: warning: ISO C++ forbids declaration of âmainâ with no type > > But otherwise compiles and runs as expected. I'd point out that sinf > is float precision, sin is double and sinl long double. With c++ I > might expect type issues (as you did in your comment), but struggling > to see anything wrong with this. Any particular error when it fails to > compile? > The first response found the error -lm which fired up the linker with the module. Apparently the compiler auto replaced sinf(M_PI/2) with a constant and didn't throw the linker error, where as the second one put in the call to the math library and threw the error. Adding -lm loads the library. I was compiling as C, but thought the error might have come due to my miscalling gcc thus invoking the C++ compiler and missing something to call the correct sin function i.e. sin/sinf/sinl etc. But I had written good code, just misinterpreted the error and forgot the link argument. I guess the C++ form as you used probably seeks to find any libraries required by the code, preventing linker errors. That is probably a good thing. I will probably use a make file in the ultimate project and would have likely caught the problem then, but the night before was an allnighter, so I was foggy (and being an old fogey, that is double fog). Regards, Les H -- users mailing list users@xxxxxxxxxxxxxxxxxxxxxxx To unsubscribe or change subscription options: https://admin.fedoraproject.org/mailman/listinfo/users Guidelines: http://fedoraproject.org/wiki/Mailing_list_guidelines