我必须将一些C代码(在Linux机器上运行)转换为.Net,并发现一些操作使用long double。它们不是特殊操作,只是一些以小数点结尾的乘法和除法,似乎只是因为它的大小而使用了这种类型。
为了转换代码,您会怎么做?我想只是将这些值相乘并在最后进行分解以查看它是否有帮助,因为代码无论如何都在最后返回短值,而且我不知道原始二进制文件是否确实使用了所有大小的长度double可以提供或者只是在引擎盖下使用一个普通的64位双。
如果您认为这不是一个好主意,您是否知道可用于包装和模拟长双精度的任何类或结构?用C / C ++制作包装并从.Net调用它是“不可能的”。
答案 0 :(得分:2)
很可能C long double实际上映射到了double,所以在不知道更多关于计算的情况下,我认为你可以在C#中使用double。
根据我的经验,很难找到64位双倍不足的科学或工程计算。
100%确定双倍足够的唯一方法是研究算法,因此这个建议仅基于本能和经验。
答案 1 :(得分:0)
在.net中,您有十进制,这是目前可用的最高精度实际类型。十进制主要用于财务计算,因为它精确且范围更大。然而,对于科学计算,不建议使用它,因为它比双倍慢。
答案 2 :(得分:0)
你可能尝试System.Decimal
(在C#中称为decimal
) - 这是一个96位的数字,使用基数为10的算术(舍入等),使其成为< em>特别适用于涉及货币等事物的情景。它不映射到IEEE,但取决于C编译器,long double
也没有; p请注意它是用软件实现的。