Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/306.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
c#超过双倍限制_C#_Unity3d_Double_Size_Limit - Fatal编程技术网

c#超过双倍限制

c#超过双倍限制,c#,unity3d,double,size,limit,C#,Unity3d,Double,Size,Limit,在开发一个所有值都呈指数增长的游戏时,我遇到了玩家的一些限制,但我想要的是让游戏几乎无限大。 我使用Double类型存储所有值,因为它具有±1.7×10^308范围 实际上,我有一大堆问题: 如何检查var是否会在某些操作上溢出 我如何管理和操作一个复杂的值,它可以容纳超过double.MaxValue范围的值 根据q2-如何序列化此值?(游戏保存加载) 游戏后期可能发生的一些溢出操作示例: a = 1.79E+308; b = 1.78E+308; c = a+b; // game freez

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

实际上,我有一大堆问题:

  • 如何检查var是否会在某些操作上溢出
  • 我如何管理和操作一个复杂的值,它可以容纳超过
    double.MaxValue
    范围的值
  • 根据q2-如何序列化此值?(游戏保存加载)
  • 游戏后期可能发生的一些溢出操作示例:

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

    溢出不是你唯一的问题<代码>系统。双值分布不均匀。您的游戏逻辑还必须具有健壮性,以防在大值时缺少浮点精度:

            double a = 1e100;
            double b = 1e100 + 1;
            if (a == b)
            {
                Debug.Log("Yup, they're equal.");
            }
    
    像这样的问题引起了雷霆战机的轰动

    有一些数字格式可以处理任意大的数字,例如,但这些格式更多地用于专门的数学用途,可能不适合游戏的性能


    有各种技巧可以克服游戏中大浮点值的问题,比如相对于本地参考点进行计算。如果您的主要目标是向玩家显示一个非常大的数字,那么几乎可以肯定,通过人为地放大显示的数字来“伪造”它会更容易。

    溢出不是您唯一的问题<代码>系统。双值分布不均匀。您的游戏逻辑还必须具有健壮性,以防在大值时缺少浮点精度:

            double a = 1e100;
            double b = 1e100 + 1;
            if (a == b)
            {
                Debug.Log("Yup, they're equal.");
            }
    
    像这样的问题引起了雷霆战机的轰动

    有一些数字格式可以处理任意大的数字,例如,但这些格式更多地用于专门的数学用途,可能不适合游戏的性能


    有各种技巧可以克服游戏中大浮点值的问题,比如相对于本地参考点进行计算。如果你的主要目标是向玩家展示一个非常大的数字,那么几乎可以肯定的是,通过人为地放大显示的数字来“伪造”它会更容易。

    宇宙中的原子不超过10^82个。你真的需要10^308以上的数字吗?似乎。。。太多了。@MatthewWatson,嗯,这对人类来说总是不够的)严肃地说,人们喜欢大数字,即使它们没有意义。我可能可以通过向玩家展示比实际更多的价值来解决问题。现在我很难很好地设计出游戏中所有的公式,像
    1.06^x
    这样的图形工作得很好,直到x大于
    ~10^4
    ,也许你不应该尝试显示/计算整数,而应该使用人类可读的值,比如1000->1 T;1000T->1m;等等,@derHugo,我现在正在做这个-100000=1a,10^10=1b。。。等,它的用户友好的显示,但对于计算,我必须使用实际的双值。。。或者没有?宇宙中的原子不超过10^82个。你真的需要10^308以上的数字吗?似乎。。。太多了。@MatthewWatson,嗯,这对人类来说总是不够的)严肃地说,人们喜欢大数字,即使它们没有意义。我可能可以通过向玩家展示比实际更多的价值来解决问题。现在我很难很好地设计出游戏中所有的公式,像
    1.06^x
    这样的图形工作得很好,直到x大于
    ~10^4
    ,也许你不应该尝试显示/计算整数,而应该使用人类可读的值,比如1000->1 T;1000T->1m;等等,@derHugo,我现在正在做这个-100000=1a,10^10=1b。。。等,它的用户友好的显示,但对于计算,我必须使用实际的双值。。。还是不?谢谢你的信息!嗯,当游戏中的数值达到大数值时,我并不真正关心小数值的精度,因为这些数值以指数的形式越来越大。我的主要目标是有一个很好的公式,它是指数增长的,并为玩家提供越来越多的挑战,每次他行动。简单的例子——成本呈指数增长,而收入是一个线性函数。为了使游戏无限大,我允许玩家重置他的收入函数,所以每次重置,玩家都会产生更多的钱。BigInteger对游戏来说很好。您只需知道它们是
    对象
    ,占用堆上的空间(因此需要进行垃圾收集),并且某些操作(例如平方根)将非常昂贵。但是加、减、乘、除和比较都很便宜。在我最近完成的空闲游戏中,我在Unity特定代码部分遇到了比BigInt更大的问题。@Draco18s,谢谢!我可以知道使用BigInt需要注意什么吗?在Unity中使用BigInt会遇到什么问题?据我所知,由于Pow功能,我所有的游戏内计算(稍后可能达到2000/分钟以上)将变得非常昂贵everywhere@Rdq基本上,任何时候你可以缓存一个值,缓存它。例如,这些值每秒被使用数百次,很少重置。更多,每10秒重新计算一次。谢谢你的信息!嗯,当游戏中的数值达到大数值时,我并不真正关心小数值的精度,因为这些数值以指数的形式越来越大。我的主要目标是有一个很好的公式,它是指数增长的,并为玩家提供越来越多的挑战,每次他行动。简单的例子——成本呈指数增长,而收入是一个线性函数。为了使游戏无限大,我允许玩家重置他的收入函数,所以每次重置,玩家都会产生更多的钱。BigInteger对游戏来说很好。您只需知道它们是
    对象
    ,占用堆上的空间(因此需要进行垃圾收集),并且某些操作(例如平方根)将非常昂贵。但是阿迪特