开发一个游戏,其中所有值都呈指数增长,我遇到了一些限制,但我想要使游戏几乎无限。
我使用Double
类型存储所有值,因为它的范围为±1.7 × 10^308
。
我确实有很多问题:
double.MaxValue
的范围?游戏后期可能发生的一些溢出操作示例:
a = 1.79E+308;
b = 1.78E+308;
c = a+b; // game freeze.
答案 0 :(得分:3)
溢出并不是您唯一的问题。 System.Double
值分布不均。您的游戏逻辑还必须要健壮,以免在大数值时缺乏浮点精度:
double a = 1e100;
double b = 1e100 + 1;
if (a == b)
{
Debug.Log("Yup, they're equal.");
}
像这样的问题在Minecraft中引起了Far Lands。
有些数字格式可以处理任意大数,例如BigInteger,但这些数字格式更多地用于特殊的数学用途,可能不适用于游戏。
有许多技巧可以解决游戏中浮点值较大的问题,例如相对于本地参考点进行计算。如果您的主要目标是向玩家显示一个很大的数字,那么可以肯定的是,通过人为地放大显示的数字来“伪造”它会更加容易。