How to do Modulo (double and Big Numbers)
-
Hi all. I was wondering why a modf ( modulo for float doesn't do its job : I explain) i have a Big Number X = 1051450100212345678903111694, so as i can't handle it into regular int, _int64, long int i used the double var type. but the % (modulo) for float is located in cmath by the modf function so when i want to calculate
double x = 1051450100212345678903111694;
double BigX = 100 * x;
double y = 97;double z = modf(BigX, & y);
i always have 0 in z
ok why not writing some code doing the regular job.
while (BigX >97)
BigX = BigX - (BigX/97);ok But in the second code the result will 96.0111 (sth like that) or when i do it with the Calculator of windows it shows me 92 which differs so how could i do such modulo for big numbers ??? Thx U
"The Ultimate Limit Is Only Your Imagination."
-
Hi all. I was wondering why a modf ( modulo for float doesn't do its job : I explain) i have a Big Number X = 1051450100212345678903111694, so as i can't handle it into regular int, _int64, long int i used the double var type. but the % (modulo) for float is located in cmath by the modf function so when i want to calculate
double x = 1051450100212345678903111694;
double BigX = 100 * x;
double y = 97;double z = modf(BigX, & y);
i always have 0 in z
ok why not writing some code doing the regular job.
while (BigX >97)
BigX = BigX - (BigX/97);ok But in the second code the result will 96.0111 (sth like that) or when i do it with the Calculator of windows it shows me 92 which differs so how could i do such modulo for big numbers ??? Thx U
"The Ultimate Limit Is Only Your Imagination."
-
Hi all. I was wondering why a modf ( modulo for float doesn't do its job : I explain) i have a Big Number X = 1051450100212345678903111694, so as i can't handle it into regular int, _int64, long int i used the double var type. but the % (modulo) for float is located in cmath by the modf function so when i want to calculate
double x = 1051450100212345678903111694;
double BigX = 100 * x;
double y = 97;double z = modf(BigX, & y);
i always have 0 in z
ok why not writing some code doing the regular job.
while (BigX >97)
BigX = BigX - (BigX/97);ok But in the second code the result will 96.0111 (sth like that) or when i do it with the Calculator of windows it shows me 92 which differs so how could i do such modulo for big numbers ??? Thx U
"The Ultimate Limit Is Only Your Imagination."
Blood_HaZaRd wrote:
i have a Big Number X = 1051450100212345678903111694, so as i can't handle it into regular int, _int64, long int i used the double var type.
A double cannot handle it with the necessary accuracy, the following code
double x = 1051450100212345678903111694.;
printf("%20f",x);outputs
1051450100212345700000000000.000000
:)
If the Lord God Almighty had consulted me before embarking upon the Creation, I would have recommended something simpler. -- Alfonso the Wise, 13th Century King of Castile.
This is going on my arrogant assumptions. You may have a superb reason why I'm completely wrong. -- Iain Clarke
[My articles] -
Hi all. I was wondering why a modf ( modulo for float doesn't do its job : I explain) i have a Big Number X = 1051450100212345678903111694, so as i can't handle it into regular int, _int64, long int i used the double var type. but the % (modulo) for float is located in cmath by the modf function so when i want to calculate
double x = 1051450100212345678903111694;
double BigX = 100 * x;
double y = 97;double z = modf(BigX, & y);
i always have 0 in z
ok why not writing some code doing the regular job.
while (BigX >97)
BigX = BigX - (BigX/97);ok But in the second code the result will 96.0111 (sth like that) or when i do it with the Calculator of windows it shows me 92 which differs so how could i do such modulo for big numbers ??? Thx U
"The Ultimate Limit Is Only Your Imagination."
You will need to get (or write) a big-integer library. Google will find lots, such as http://mattmccutchen.net/bigint/[^] Disclaimer: I have nothing to do with Matt, except that I downloaded his library.
Software rusts. Simon Stephenson, ca 1994.
-
Thx It seems That i missunderstood The modf . ^^ thx ;P
"The Ultimate Limit Is Only Your Imagination."
-
You will need to get (or write) a big-integer library. Google will find lots, such as http://mattmccutchen.net/bigint/[^] Disclaimer: I have nothing to do with Matt, except that I downloaded his library.
Software rusts. Simon Stephenson, ca 1994.
Great Library but could i Use some Commons var, i don't like going for others library :p
"The Ultimate Limit Is Only Your Imagination."
-
You will need to get (or write) a big-integer library. Google will find lots, such as http://mattmccutchen.net/bigint/[^] Disclaimer: I have nothing to do with Matt, except that I downloaded his library.
Software rusts. Simon Stephenson, ca 1994.
i 've got errors
error C2258: illegal pure syntax, must be '= 0'
error C2252: 'less' : pure specifier can only be specified for functions
error C2258: illegal pure syntax, must be '= 0'
error C2252: 'equal' : pure specifier can only be specified for functions
error C2258: illegal pure syntax, must be '= 0'
error C2252: 'greater' : pure specifier can only be specified for functionsJust here
class BigInteger {
public:
typedef BigUnsigned::Blk Blk;
typedef BigUnsigned::Index Index;
typedef BigUnsigned::CmpRes CmpRes;
static const CmpRes
less = BigUnsigned::less ,
equal = BigUnsigned::equal ,
greater = BigUnsigned::greater;
// Enumeration for the sign of a BigInteger.
enum Sign { negative = -1, zero = 0, positive = 1 };protected:
Sign sign;
BigUnsigned mag;:omg:
"The Ultimate Limit Is Only Your Imagination."
-
i 've got errors
error C2258: illegal pure syntax, must be '= 0'
error C2252: 'less' : pure specifier can only be specified for functions
error C2258: illegal pure syntax, must be '= 0'
error C2252: 'equal' : pure specifier can only be specified for functions
error C2258: illegal pure syntax, must be '= 0'
error C2252: 'greater' : pure specifier can only be specified for functionsJust here
class BigInteger {
public:
typedef BigUnsigned::Blk Blk;
typedef BigUnsigned::Index Index;
typedef BigUnsigned::CmpRes CmpRes;
static const CmpRes
less = BigUnsigned::less ,
equal = BigUnsigned::equal ,
greater = BigUnsigned::greater;
// Enumeration for the sign of a BigInteger.
enum Sign { negative = -1, zero = 0, positive = 1 };protected:
Sign sign;
BigUnsigned mag;:omg:
"The Ultimate Limit Is Only Your Imagination."
-
Looks like you use an old compiler not supporting initialization of static const vars in class declaration. Initialize them in cpp-file instead if BigInteger is your own class.
lool ok how Unlucky i am
"The Ultimate Limit Is Only Your Imagination."
-
Hi all. I was wondering why a modf ( modulo for float doesn't do its job : I explain) i have a Big Number X = 1051450100212345678903111694, so as i can't handle it into regular int, _int64, long int i used the double var type. but the % (modulo) for float is located in cmath by the modf function so when i want to calculate
double x = 1051450100212345678903111694;
double BigX = 100 * x;
double y = 97;double z = modf(BigX, & y);
i always have 0 in z
ok why not writing some code doing the regular job.
while (BigX >97)
BigX = BigX - (BigX/97);ok But in the second code the result will 96.0111 (sth like that) or when i do it with the Calculator of windows it shows me 92 which differs so how could i do such modulo for big numbers ??? Thx U
"The Ultimate Limit Is Only Your Imagination."
I'm a bit confused: 0xE97804B9A34AB4E fits in an __int64 with a nibble to spare. I know it depends what your compiler is and __int64 isn't a standard type but if you've got it and it doesn't need to be portable then why not use it? Ash PS: I'm normally against using non-portable code but at least someone trying to compile your code for a platform with a 64 bit int would at least be warned something was up. PPS: And if you need to store it in 32 bit values you can take advantage of some properties of ints that makes it relatively easy to calculate the modulus.