将浮游物从fortran传递到.Net

时间:2011-03-04 16:16:05

标签: c# dll floating-point fortran

我们正在将应用程序从VB6迁移到.net c#。

该应用程序使用fortran dll执行一些计算。从我们的代码(VB6和c#)中调用fortran,我们注意到在c#中获取的浮点变量似乎与vb6相比存在一些差异。

例如,如果我们有以下fortran代码:

subroutine FloatTest (delta) 
      !ms$attributes DLLEXPORT, ALIAS: 'FloatTest ' :: FloatTest 
      !ms$attributes REFERENCE :: delta
real*4  delta
delta = 1.0/3.0
END

任何想法为什么我们在c#中得到的浮点值为0.333333343而不是我们在VB6中得到的0.3333333?

感谢。 尼鲁

2 个答案:

答案 0 :(得分:2)

您使用的是有限精度算术。二进制数字只能近似1/3

似乎C#配置为打印更多小数位,因为两个结果都在前7位数字中一致。

C#打印的值“看似错误”,但实际上比VB打印的值更准确。

答案 1 :(得分:2)

结果准确。 fortran代码使用4字节浮点(又名float或single),这种格式只能存储6.5位有效数字。打印更多只是产生随机噪声数字。使用real * 8将精度提高到15位有效数字。或者修改print语句以显示不超过6位数。