C# 将浮点从fortran传递到.Net

C# 将浮点从fortran传递到.Net,c#,dll,floating-point,fortran,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 ::

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

谢谢。
Niro

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

似乎C被配置为打印更多的小数位,因为两个结果在前7位一致


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

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

似乎C被配置为打印更多的小数位,因为两个结果在前7位一致


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

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

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

我正在将浮点从fortran传递到VB6和C。但是,VB6和C之间的结果不同。在VB6中得到0.3333,在c中得到0.333343。我不确定为什么c值看起来是错误的。我将浮点从fortran传递到VB6和c。但是,VB6和c之间的结果是不同的。在VB6中得到0.3333,在c中得到0.333343。我不知道为什么c值看起来是错误的。请注意,real*4和real*8表示法虽然作为扩展得到广泛支持,但却是非标准的。对于可移植代码,请使用所选的固有函数\u real\u kind来请求所需的精度。请注意,real*4和real*8表示法虽然作为扩展得到广泛支持,但却是非标准的。对于可移植代码,请使用所选的内部函数\u real\u kind来请求所需的精度。