|
Yes, if you have them.
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]
|
|
|
|
|
What you 'see' is a formatted string representation of the actual value. You do not lose accuracy in calculations just because the string looks truncated.
|
|
|
|
|
ok o how could u explain this :
i have double x = 105145010021234567890311169400.
and when i make
double y = fmod(x, 97) it gives me 16 or when i calculte it with a calculator it gives me 92
"The Ultimate Limit Is Only Your Imagination."
|
|
|
|
|
Your value cannot be stored within a double precision floating point number (64 bit IEEE whatever) It simply holds too much information, so your system will have to round it off.
|
|
|
|
|
|
You'll never get a representation of that integer into a double without loosing a chunk of accuracy. 105145010021234567890311169400 is 0xE97804B9A34AB4E which is going to take about 60 bits to hold. As a double only has 53 bits to store digits you've already rounded your number to the nearest multiple of 128 by storing it in a double.
So as it's an integer, store it in an integer - the e bit is non-negotiable with a floating point number and has no bearing at all on your problem.
Ash
|
|
|
|
|
ok so the best solution is to navigate into mthemticl splitting and mke the purpose by slices
"The Ultimate Limit Is Only Your Imagination."
|
|
|
|
|
|
i alredy downloaded the GMP zip files but i had problems to use it in MVS 6.0 .. i m a newbie in such manipulations (integrating foreign files inti my project) . may be when my skills will be better i 'll try it
"The Ultimate Limit Is Only Your Imagination."
|
|
|
|
|
I think you need to spend some more time reading about floating point number representations. A floating point (double) number allows you to store extremely large or extremely small values and anything in between, but at a cost of accuracy in these values. Thus they are no good for applications where numeric accuracy is important, e.g. anything to do with money.
When you display such numbers on screen or printer you have various options for how you wish them to be represented on screen: in scientific 1.3456e-2, or decimal 0.013456 etc.
If you want to use very large numbers with no loss of accuracy then you need to find a library or class (or write one) that can do it for you.
It's time for a new signature.
|
|
|
|
|
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 always have 0 in z
That's because there is no fractional part in your value; both x and BigX in your sample are whole numbers. See the description of modf()[^].
It's time for a new signature.
|
|
|
|
|
Thx It seems That i missunderstood The modf . ^^ thx
"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]
|
|
|
|
|
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."
|
|
|
|
|
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 functions
Just 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;
enum Sign { negative = -1, zero = 0, positive = 1 };
protected:
Sign sign;
BigUnsigned mag;
"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."
|
|
|
|
|
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.
|
|
|
|
|
Hi All
what is difference between thread priority THREAD_PRIORITY_IDLE,THREAD_PRIORITY_NORMAL,THREAD_PRIORITY_HIGHEST.?We are using like this
AfxBeginThread(ThreadName, (LPVOID) this,THREAD_PRIORITY_HIGHEST,0,0);
How can i check it when application is running?
Please help me
|
|
|
|
|
|
Thanks
Through GetThreadPriority i can know application running with which priority(Like NORMAL,IDLE or HIGHEST).
where i can find theoretical difference?
|
|
|
|
|
|