c# - 将 float 从 Fortran 传递到 .Net

标签 c# dll floating-point fortran

我们正在将应用程序从 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/

相关文章:

c# - 从 Windows 上的 C# 迁移到 Mac 上的 Objective-C

c# - 我怎样才能有相同的编码字符串?

c# - 如何将写入 Stream 1 的内容通过管道传输到 Stream 2?

dll - QT5,如何从 DLL 使用 QML?

c - 需要帮助从 Delphi 正确调用 C 函数

c - double 5.2在二进制文件中是如何表示的?

c - 为什么通过将无限级数的前 N ​​项相加来计算 sin(x) 总是返回 0.00000?

c# - 手动创建 IWebHostEnvironment asp.net core 3.1

c++ - 使用 WINAPI 的复杂库依赖项目中未解析的外部符号

c++ - 整数的指数速记