|
现在游戏中的数字往往非常大,几亿,几兆屡见不鲜。而游戏的伤害压缩往往仅在显示层面,如一万亿的数字显示为一亿,那么底层仍然要计算如此庞大的数。
据我所知,一些游戏已经出现过数字溢出的问题,如DNF曾经在90版本出现过附加伤害溢出问题(21e bug):当附加伤害伤害超过约21e时,总伤害反而大幅减少。推测原因是附加伤害使用int32类型存储,数据范围是-2,147,483,648 ~ +2,147,483,647。
据我所知,大多数编程语言提供的标准数据类型,最大整型是int64与unsigned int64,uint64最大表示整数是3.402823669209385e+38。而linux环境gcc提供了int128等,c#,rust等也提供了int128。而int256,或是BigInteger的实现往往依赖于高精度算法,处理速度较慢。
我想知道对于那些使用天文数字的游戏,数据类型是如何选择的。 |
|