Я должен сказать, что последний раз, когда я использовал Паскаля, был близок к 25 годам ранее. Но я вытащил Free Pascal из любопытства и попробовал это:
fValueMax
Мои первые две Max
команды показывают тот же результат, о котором вы сообщали о просмотре. Я подозревал, что, возможно, fValue
возвращал ценность с меньшей точностью, которую 0
вы ожидали вернуться, поэтому я создал double
и присвоил ей тот же самый литерал, который вы назначили fValue
, и, конечно же, его значение выглядит очень близко к тому, что вы возвращаетесь в fValueMax
,
Таким образом , в конце концов, вместо того , чтобы вызывать Max
с fValue
и буквальным 0
, я назвал его с двумя переменными типа 0.0
, один из которых я установил в fValue2
. В этом случае вы можете видеть, что input ( fValueMax2
) и output ( Max
) имеют точно такое же значение. Поэтому, хотя я не знаю точно, какие правила Pascal предназначены для определения перегрузки для вызова, мне интересно, был ли ваш первоначальный вызов Max
каким-то образом разрешающим версию, которая принимает два single
значения и возвращает то же самое.
Хотя вы можете быть в курсе этого, я чувствую себя вынужденным бросить в обычное предостережение о том, как типы с плавающей точкой, например, single
и double
не всегда смогут точно представлять значения, которые вы им хотите. Вот хороший обзор.