我们正在将应用程序从 VB6 迁移到 .net c#。
该应用程序使用 fortran dll 来执行一些计算。 Fortran 是从我们的代码(VB6 和 c#)中调用的,我们注意到在 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 吗?
谢谢。 尼罗
最佳答案
结果是准确的。 Fortran 代码使用 4 字节 float (也称为 float 或单数),这种格式只能存储 6.5 位有效数字。打印更多只会产生随机噪声数字。使用 real*8 将精度提高到 15 位有效数字。或者修改打印语句显示不超过 6 位数字。
关于c# - 将 float 从 Fortran 传递到 .Net,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5196386/