提问人:s0ubap 提问时间:1/11/2013 最后编辑:Soner Gönüls0ubap 更新时间:1/11/2013 访问量:795
XNA 上的浮点精度
Float precision on XNA
问:
我正在使用 Visual Studio 2010 Ultimate,在 .Net framework 4 上工作。
和的类型是 ,来自 XNA 框架。groundControlPoint
worldPosition
Vector2
我知道每个调试器都使用自己的精度管理,但这个问题使我的代码无法正常工作。
我想将我的加法与给定的浮点值进行比较(在我的情况下是 5166.28003..),但由于我的加法结果是,它总是错误的......5166.28027
关于如何理解这一点的任何提示?
答:
1赞
Richard Ev
1/11/2013
#1
如 MSDN 中所述,精度仅为 7 位......float
该类型可以表示从大约 1.5 × 10E−45 到 3.4 × 10E38 的值,精度为 7 位。
float
在您的例子中,您正在处理的值是 ,因此它只能精确到小数点后第 3 位。5166.28003
如果需要更高的精度,请考虑使用(精度为 15-16 位)或十进制
(通常用于财务和货币计算)。double
1赞
Soner Gönül
1/11/2013
#2
float
仅精确到 7 位。从MSDN
看。
float 类型可以表示大约 1.5 × 之间的值 10−45 到 3.4 × 1038,精度为 7 位。
十进制
类型看起来更适合您的情况。
decimal 类型是一种 128 位数据类型,适用于金融和 货币计算。decimal 类型可以表示范围的值 从 1.0 × 10−28 到大约 7.9 × 1028,其中 28-29 显著 数字。
评论
0赞
Sayse
1/11/2013
我认为他在 XNA 中使用了定义为浮点数的变量,因此他无法控制要使用的变量,编辑:除了在添加之前进行转换Vector2
X
0赞
s0ubap
1/11/2013
@Sayse 你说得对,我没有任何控制权......我看到的唯一好的解决方案是创建我自己的 Vector2 类,使用 double...但我想,接下来我就得处理表演了
评论
float