LinuxQuestions.org

LinuxQuestions.org (/questions/)
-   Programming (https://www.linuxquestions.org/questions/programming-9/)
-   -   modulo of 2 floating point numbers? (https://www.linuxquestions.org/questions/programming-9/modulo-of-2-floating-point-numbers-234051/)

jenna_h 09-22-2004 08:46 PM

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?

itsme86 09-22-2004 08:51 PM

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.

leonscape 09-22-2004 09:06 PM

For modulo type functionality for floats and doubles, see Rounding and Remainder Functions.

Hko 09-23-2004 05:13 AM

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.

jenna_h 09-23-2004 10:04 PM

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.

Hko 09-24-2004 05:09 AM

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?

jim mcnamara 09-24-2004 09:39 AM

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.


All times are GMT -5. The time now is 10:46 AM.