Передача поплавков из Фортрана в .Net - PullRequest
1 голос
/ 04 марта 2011

Мы переносим приложение из VB6 в .net c #.

Приложение использует Fortran DLL для выполнения некоторых расчетов. Фортран вызывается из нашего кода (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

Есть идеи, почему мы получаем значение с плавающей запятой 0,333333343 в c # вместо 0,3333333, которое мы получаем в VB6?

Спасибо. Niro

Ответы [ 2 ]

2 голосов
/ 04 марта 2011

Результат точный.Код Фортрана использует 4-байтовую с плавающей точкой (или с плавающей запятой), формат, который может хранить только 6,5 значащих цифр.Печать больше просто производит случайные цифры шума.Используйте real * 8, чтобы повысить точность до 15 значащих цифр.Или измените оператор печати, чтобы он отображал не более 6 цифр.

2 голосов
/ 04 марта 2011

Вы используете ограниченную точность арифметики.Двоичные числа могут быть только приблизительными 1/3.

Похоже, что C # настроен на печать большего количества десятичных разрядов, поскольку оба результата совпадают в первых 7 цифрах.

Кажется, что значение, напечатанное C # "неправильно ", но на самом деле это более точно, чем значение, напечатанное VB.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...