【发布时间】:2015-01-17 08:04:57
【问题描述】:
我一直在用 C# 开发一个游戏,它目前使用浮点数进行一些计算和算术。该游戏将具有网络功能和一个基本的回放系统,该系统会随着时间的推移跟踪输入和基本的玩家动作。我认为这些特性要求我让每一个重要的核心机制都具有确定性。由于浮点数的不确定属性,我浏览了一些关于定点数的资源,以便为自己提供浮点数的替代方案。
我了解定点的许多核心概念,因为有各种关于此问题的详细记录的在线资源。但是,我不确定是否应该将 32 位类型 (int) 或 64 位类型 (long) 用于定点类的原始值。
我想为我的班级提供以下基本功能:
- 传递浮点、双精度或整数并将其转换为定点值。
- 针对定点、int、float 和 double 类型的值进行加、减、除、乘。
我的假设是最好使用 long ,因为它可以让我获得更高的小数精度,但我担心可能会遇到的潜在障碍。例如,在针对 32 位或在 32 位机器上运行时使用 long 提供问题?当涉及到潜在的硬件配置时,int 最终是否比 long 更兼容?因为游戏的性能很重,从浮点数切换到基于长整数的定点数时会不会有很大的性能损失?
这似乎是一个愚蠢的问题,但我想我是否应该使用基于 cpu 架构的最低公分母的类型,我希望我的程序可以在其上运行,或者这些问题通常由编译器在编译期间处理? linux 或 mac osx 处理长计算的方式是否与 windows 机器不同?
【问题讨论】:
-
C# 中的 Int 始终为 32 位,C# 中的 long 始终为 64 位。这是语言和 CLR 的一个特性。处理器可以是 32 位或 64 位,这只是衡量它一次可以处理多少数据的指标。它与语言中的数据类型无关。
标签: c# int 32bit-64bit long-integer fixed-point