LinuxAnswers - the LQ Linux tutorial section.
 Home Forums HCL Reviews Tutorials Articles Register Search Today's Posts Mark Forums Read
 LinuxQuestions.org modulo of 2 floating point numbers?
 Programming This forum is for all programming questions. The question does not have to be directly related to Linux and any language is fair game.

Notices

 09-22-2004, 08:46 PM #1 jenna_h Member   Registered: Nov 2002 Distribution: Mandrake 9.0 Posts: 58 Rep: modulo of 2 floating point numbers? Hi, I have been trying to write a simple C++ program (using gcc 3.3.2) to find large prime numbers, which usually involves using the modulo (%) operator to check for factors. I need at least 11 significant digits to have adequate precision, but the int type apparently doesn't go that high. Is it possible to perform a modulo operation with floating point numbers, or alternatively, use ints with at least 11 significant digits?
 09-22-2004, 08:51 PM #2 itsme86 Senior Member   Registered: Jan 2004 Location: Oregon, USA Distribution: Slackware Posts: 1,246 Rep: You can't use the modulo operator on floating point numbers, but you can get an int with 11 significant digits. In gcc you just use the variable type long long (yes, 2 of them). This will get you a 64-bit integer which should be more than enough.
 09-22-2004, 09:06 PM #3 leonscape Senior Member   Registered: Aug 2003 Location: UK Distribution: Debian SID / KDE 3.5 Posts: 2,313 Rep: For modulo type functionality for floats and doubles, see Rounding and Remainder Functions.
 09-23-2004, 05:13 AM #4 Hko Senior Member   Registered: Aug 2002 Location: Groningen, The Netherlands Distribution: ubuntu Posts: 2,530 Rep: If you really need HUGE integers, check out libgmp (GNU Multiple Precision library). This will enable you to use thousands (possibly millions) of digits. But, like itsme86 already said, "long long int" will go a long long way as well. If you don't need negative number, you can also double the range with "unsigned long long int". If you have libgmp installed, "info gmp" will give you the documentation. Last edited by Hko; 09-23-2004 at 05:16 AM.
 09-23-2004, 10:04 PM #5 jenna_h Member   Registered: Nov 2002 Distribution: Mandrake 9.0 Posts: 58 Original Poster Rep: Thanks! For some reason, "long long int" still doesn't accept the numbers, but using drem() from the math.h package lets me calculate remainders with just a "double" datatype. I'll try it out and see how it goes.
 09-24-2004, 05:09 AM #6 Hko Senior Member   Registered: Aug 2002 Location: Groningen, The Netherlands Distribution: ubuntu Posts: 2,530 Rep: Hmm. Doesn't sound like a good idea to me to use floating point numbers to calculate primes. I maybe wrong here. I also can hardly imagine that longlongint doesn't work. How big are the numbers? Can you post code?
 09-24-2004, 09:39 AM #7 jim mcnamara Member   Registered: May 2002 Posts: 964 Rep: Floating point operations sometimes create 'fuzz' - imprecise results way out at 8 or 10 decimal places. It's caused by floating point representations of odd numbers. When you are working with 12 digits of precision, you may bump into fuzz. You will be much better of using an extended precsision library - why it was invented in the first place. double will not work for you reliably.