3

我正在用 C# 构建一个类似 CAD 的应用程序。我将SlimDX其用作图形引擎,对于数字运算部分,我构建了自定义库,这些库自然而然地最终依赖于 System.Math 类。

现在,问题是SlimDX库使用由浮点数据类型组成的结构,而 Math 类包含几个只接受和返回双精度对象的方法,例如:Math.Ceiling 和 Math.Sin。所以我发现自己不断地来回转换我的数据,从浮动到加倍。

这似乎不对。我并不关心演员阵容可能对性能造成的影响(也许我应该如此?),但担心他们可能导致的数值不稳定性,这更可怕。

所以我只是想知道您通常如何处理这些情况,因为我猜这一定不是罕见的情况。

4

2 回答 2

5

不应该有任何数字不一致。

在 .NET 中的三种浮点数据类型(float以及C# 不可用但在许多成员内部使用的类型)中,它们将出现 3 次doubleF

  1. 由应用程序的数学引擎完成的存储和定义。
  2. 由该引擎完成的计算。
  3. 渲染。

数字 1 可能主要用 来定义double。数字 2 也将在很大程度上根据double它也将有所使用来F定义。数字 3 将根据single您给出的原因进行定义,但如果层之间的边界定义明确,这不会对实际计算的内容产生任何影响。

于 2014-11-27T21:45:20.260 回答
-2

如果这是我的应用程序并且我担心可能会丢失完整性,我会使用所需的数据类型重新创建适当的方法。

.Net 是一个试图解决大多数问题的通用平台,但它不能解决所有问题。虽然这在短期内可能是额外的工作,但如果精度确实是一个问题,那么投入的时间将是非常值得的。

于 2014-11-27T20:49:05.863 回答