1

我必须将一些 C 代码(在 Linux 机器上运行)转换为 .Net,并发现一些带有 long double 的操作。它们不是特殊运算,只是一些以很多小数结尾的乘法和除法,似乎只是因为它的大小而使用了该类型。

为了转换代码,你会做什么?我正在考虑将值相乘并在最后除以查看它是否有帮助,因为代码无论如何都会在最后返回短值,而且我不知道原始二进制文件是否确实使用了所有长double 可以提供,或者如果它只是在引擎盖下使用一个常见的 64 位双精度。

如果您认为这不是一个好主意,您是否知道任何可用于包装和模拟 long double 的类或结构?在 C/C++ 中制作包装器并从 .Net 中调用它是“不可能的”。

4

3 回答 3

2

C long double 很可能实际上映射到 double ,因此在不了解计算的情况下,我假设您可以在 C# 中使用 double 。

根据我的经验,很难找到 64 位双精度不够的科学或工程计算。

100% 确定 double 就足够的唯一方法是研究算法,因此该建议仅基于直觉和经验。

于 2011-08-09T07:35:48.543 回答
0

在 .net 中,您有十进制,这是目前可用的最高精度实型。十进制主要用于财务计算,因为它精确且范围更大。然而,对于科学计算,不推荐使用它,因为它比 double 慢。

于 2011-08-09T07:21:59.970 回答
0

可以尝试System.Decimaldecimal在 C# 中也称为) - 这是一个 96 位数字,具有以 10 为底的算术(四舍五入等),使其特别适用于涉及货币之类的场景。它不映射到 IEEE,但取决于 C 编译器,也不映射long double;p 请注意,它是在软件中实现的。

于 2011-08-09T07:23:22.623 回答