I wish there were a way to handle int128's on the Atmel 328P but I guess if I ever want to implement a quadratic solution for a 16-bit ADC calibration routine then I'll have to graduate the board design to a 16 or 32-bit microprocessor.
Already using long long (64 bit integers) goes through program memory faster than a bunch of orphans going through cream buns at the Vicar's garden party. I don't think you would want to do any serious maths with 128-bit integers.
I ported the "big number" library to the Arduino:
http://www.gammon.com.au/forum/?id=11519That lets you use very large numbers, still with the caveat that you will run out of RAM if you are not careful. Still, I was able to calculate 80 factorial using it.
As for uint8_t vs byte or int8_t vs char, personally I think it is cluttered. But that's just me.
I can see
at a glance (and I emphasise that) that one is unsigned (byte) and one is signed (char). It doesn't say so, but I pull in the big guns here: my memory.
Whereas with uint8_t vs int8_t, I find I need to slow down, stare at it a bit, and ask myself "is there a 'u' at the start?". Or, for the width, look in the middle for 8/16/32 etc.
And (again personally) I find this better documenting:
unsigned long foo;
Compared to:
uint32_t foo;
The first one is "in your face" that is is unsigned. Heck, the word "unsigned" is actually there. The second is just a tiny "u" at the start of the typename.