将浮点数从 Fortran 传递到 .Net

发布于 2024-10-20 05:23:26 字数 443 浏览 2 评论 0原文

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

谢谢。 尼罗

We are migrating an application from VB6 to .net c#.

The application uses a fortran dll to perform some calculations. The fortran is called from our code (VB6 and c#) and we notice that there seems to be some differences in a floating point variable fetched in c# than vb6.

So for example if we have the following fortran code:

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

Any idea why do we get a floating point value of 0.333333343 in c# instead of the 0.3333333 we get in VB6?

Thanks.
Niro

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

余生共白头 2024-10-27 05:23:26

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

The result is accurate. The fortran code is using 4 byte floating point (aka float or single), a format that can store only has 6.5 significant digits. Printing more just produces random noise digits. Use real*8 to improve the accuracy to 15 significant digits. Or modify the print statement to show no more than 6 digits.

此刻的回忆 2024-10-27 05:23:26

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

看来 C# 配置为打印更多小数位,因为两个结果在前 7 位数字上一致。

C# 打印的值对您来说“似乎是错误的”,但实际上它比 VB 打印的值更准确。

You're using limited precision arithmetic. Binary numbers can only approximate 1/3.

It appears that C# is configured to print more decimal places, since both results agree in the first 7 digits.

The value printed by C# "seems wrong" to you, but it is in fact more accurate than the value printed by VB.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文