Помощь новичкам

Это не мой код. Я переписываю его под Паскаль. Там, кстати, не из-за этого проблема. Тот метод работает правильно.

Добавлю. Сравнение вещественных чисел правильно делать в формате:

Abs(first - second) < Eps

.

А еще лучше перегрузить операцию =

Пожалуй, соглашусь. Можно, например, так:

const
  Eps = 0.001;

function operator=(x, y: real): boolean; extensionmethod := Abs(x - y) < Eps; // Если закомментировать, то вместо True будет False.

begin
  Writeln(1.0002 = 1.0004);
end.

.

упрощаю программу, убрал вообще графическое окно естественно и uses graphABC;

перестало работать это:

  var main_form := new System.Windows.Forms.Form;
  main_form.StartPosition := System.Windows.Forms.FormStartPosition.Manual;
  main_form.Bounds := new System.Drawing.Rectangle(815, 23, 460, 170);//размер окна
  main_form.Closing += procedure(o, e)-> System.Diagnostics.Process.GetCurrentProcess.Kill;

ошибку выдает тут: main_form.Bounds := new System.Drawing.Rectangle(815, 23, 460, 170);//размер окна ???

неизвестное имя Drawing, как-то можно без этого?

Вы хотите сказать, что операторы в Паскале работают не так, как в C#?

Я ничего об этом не говорил, я сказал лишь, как правильно сравнивать вещественные числа. К примеру, если числа будут отличаться лишь последней цифрой, то они будут считаться не равными. Это, думаю, не совсем то, что Вы бы хотели. Вы не можете гарантировать, что отличий в последних цифрах чисел не будет. Поэтому лучше проверять на разницу двух чисел - если она мала, то считать числа равными.

Я ещё раз повторяю, код на C# не мой, но он работает как часы. Моя задача - переписать его на Паскаль. Вопрос: почему зеркальные коды работают совершенно по-разному.

Я Вас услышал, но счёл нужным сказать про сравнение вещественных чисел.

Удивительно, что сами разработчики не могут найти проблему.

{$Reference 'System.Drawing.dll'}
Uses System.Drawing;
1 лайк

Единственное что пока я могу сказать - это то, что меня немного удивило такое частое использование exit, даже в конце подпрограммы GaussRandom.

Это было сделано для исключения ошибок, связанных с заменой return на Result.

Я так и подумал. :slight_smile:

1 лайк

Ну у меня например в паскале выводится -20,8074002626979 0,341588060543909 -6,3959925341402

У вас версия актуальная?

Да. Вчера обновил.

А Вы не C# случайно запустили? Там именно такие результаты.

Нет, паскаль

image

Вот что у меня в PascalABC.Net.

Хм, забавно. У меня те-же результаты, но только если отключить модуль.