RE: Undefined reference to 'fmod'

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



James Stevenson wrote:

> > > No, fmod() is in libm, so you have to add -lm to the link command.
> > >
> > > As a general rule, anything which uses <math.h> has to link against
> > > libm.
> > 
> > Interesting.  Compiling with the argument -lm fixed my problem.  That
> > leads me to another question: why are the functions found in math.h in a
> > separate library?  I would have thought that all functions found in the
> > standard C library would be in glibc (The K&R book I'm reading said that
> > math.h is a part of the standard library.)
> 
> It cant be not all processors have floating point unit's Therefor it cannot
> be in the main standard libary

There are some functions in libc which use floating-point. Also, FP is
part of the C language itself; on processors which don't support FP in
hardware, you just emulate it.

The reason for the use of a separate math library is more likely to be
so that you can have different versions for systems with and without
FP support. Implementing FP math functions using an FP emulation
library is likely to be more efficient that relying upon generic FP
emulation.

Generic FP emulation normally works by handling "illegal instruction"
exceptions, which occur if a CPU without FP support attempts to
execute a FP instruction. The exception handler then emulates the
instruction in software. Exception handling normally adds significant
overhead, so it's more efficient to replace FP instructions with calls
to functions in an FP emulation library.

-- 
Glynn Clements <glynn@xxxxxxxxxxxxxxxxxx>
-
: send the line "unsubscribe linux-c-programming" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at  http://vger.kernel.org/majordomo-info.html

[Index of Archives]     [Linux Assembler]     [Git]     [Kernel List]     [Fedora Development]     [Fedora Announce]     [Autoconf]     [C Programming]     [Yosemite Campsites]     [Yosemite News]     [GCC Help]

  Powered by Linux