I have numbers that need precision of at least 10 decimals, while they are as big as 10^8.
Is this possible??
I have numbers that need precision of at least 10 decimals, while they are as big as 10^8.
Is this possible??
Yes this is possible.
Because Unity runs Mono, you have access to all the standard .net base types. There are a number of different base types of varying precision which you can use to hold numeric values:
Name Type Signed Bytes Values
sbyte System.Sbyte Yes 1 -128 to 127
short System.Int16 Yes 2 -32768 to 32767
int System.Int32 Yes 4 -2147483648 to 2147483647
long System.Int64 Yes 8 -9223372036854775808 to 9223372036854775807
byte System.Byte No 1 0 to 255
ushort System.Uint16 No 2 0 to 65535
uint System.UInt32 No 4 0 to 4294967295
ulong System.Uint64 No 8 0 to 18446744073709551615
float System.Single Yes 4 Approximately 1.5 x 10-45 to 3.4 x 1038
with 7 significant figures
double System.Double Yes 8 Approximately 5.0 x 10-324 to 1.7 x 10308
with 15 or 16 significant figures
decimal System.Decimal Yes 12 Approximately 1.0 x 10-28 to 7.9 x 1028
with 28 or 29 significant figures
In your case, it sounds like you'd want to use either double or decimal.
double has a lower precision, but a wider range of potential exponents, and - like float - is not "decimally accurate" becuase it stores values as a binary floating point type.
decimal has much higher precision, and is "decimally accurate" because it stores values as a decimal floating point type. For this reason, it's generally used for "naturally exact decimal values", such as financial calculations.
If you came here looking for how to use UInt64
or UInt32
in Unity - most likely as a result of getting a compiler error when using one; Then simply include:
using System;
At the top of your script and the errors should go away.