On Sun, 19 May 1996, Corey Hoitsma wrote:
> unsigned long int exp; /* The experience of the player */
> ^^ line #694
> unsigned long int exp;
> ^^ line #1019
>
> And everywhere that GET_EXP is called I have %lu.
>
> And I STILL get all the warnings:
>
> class.c:712: warning: integer constant out of range
> class.c:712: warning: decimal constant is so large that it is unsigned
> class.c:713: warning: integer constant out of range
> class.c:713: warning: decimal constant is so large that it is unsigned
>
> The exp numbers for these lines are:
>
> {"the Mage (98)", "the Mage (98)", 4829856768},
> {"the Mage (99)", "the Mage (99)", 5312842240},
>
> Should I use a double?
> If so, what do I use to display with sprintf? %f?
>
> Maybe my numbers are too high.. but I can't really tell 'cause
> the MUD changes them to negavtives, so it doesn't help to much:P
>
This may be wrong, but this is what I have observed... on 32 bit machines
long int's are 32 bit long variables... so a unsigned long int would be a
number between 0 and 2^32 which is 4294967296... so when it says the number
4829856768 is out of range it means that it is larger than the maximum
size for the variable which is 2^32...
On my mud, I turned exp into a struct, I don't have the exact code in
front of me, but this is pretty close I think:
struct exp_type {
unsigned int high;
unsigned int mid;
unsigned int low;
};
then in the player file I just defined exp as: struct exp_type exp;
and in all of my functions dealing with exp I just told it to could mid
and low in billions... so if mid = 50 and low = 100 and high = 72000, you
would have 72000000000050000000100 exp... this may be a bit much, but I
like to be excessive :) (this will give you a max exp of
4294967296000000000000000000 exp)
Al Figliolia - IMP of the siteless Crimson Realms
This archive was generated by hypermail 2b30 : 12/18/00 PST