C#超越双倍限制

时间:2018-08-23 08:39:54

标签: c# unity3d double size limit

开发一个游戏,其中所有值都呈指数增长,我遇到了一些限制,但我想要使游戏几乎无限。 我使用Double类型存储所有值,因为它的范围为±1.7 × 10^308

我确实有很多问题:

  1. 如何检查var在某些操作上是否会溢出?
  2. 我该如何管理和操作一个复杂的值,该值可以容纳超过double.MaxValue的范围?
  3. 根据q2-如何序列化此值? (游戏保存负载)

游戏后期可能发生的一些溢出操作示例:

a = 1.79E+308;
b = 1.78E+308;
c = a+b; // game freeze.

1 个答案:

答案 0 :(得分:3)

溢出并不是您唯一的问题。 System.Double值分布不均。您的游戏逻辑还必须要健壮,以免在大数值时缺乏浮点精度:

        double a = 1e100;
        double b = 1e100 + 1;
        if (a == b)
        {
            Debug.Log("Yup, they're equal.");
        }

像这样的问题在Minecraft中引起了Far Lands

有些数字格式可以处理任意大数,例如BigInteger,但这些数字格式更多地用于特殊的数学用途,可能不适用于游戏。

有许多技巧可以解决游戏中浮点值较大的问题,例如相对于本地参考点进行计算。如果您的主要目标是向玩家显示一个很大的数字,那么可以肯定的是,通过人为地放大显示的数字来“伪造”它会更加容易。