- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
Function isEQ(x,y : Real) : Boolean;
Begin
if(x = y) Then isEQ := True Else isEQ := False;
End;
Begin
{...}
End.
Нашли или выдавили из себя код, который нельзя назвать нормальным, на который без улыбки не взглянешь? Не торопитесь его удалять или рефакторить, — запостите его на говнокод.ру, посмеёмся вместе!
+115
Function isEQ(x,y : Real) : Boolean;
Begin
if(x = y) Then isEQ := True Else isEQ := False;
End;
Begin
{...}
End.
Не выспался...
А для вещественных лучше так:
А c учётом вычислительных погрешностей:
(x = 0 особый случай).
Здесь eps определено так, что 1 + eps = 1 в логике компилятора.
Чувствую, сейчас кто-нибудь прибежит и крикнет: «Баян!»
Нужно так:
- это не сработает.
Пару раз наступил на грабли из-за машинного эпсилон, после чего сравниваю именно таким способом.
зы: Что-бы ты не говорил, а isEQ := (x - y) = 0; не сработает.
Или через указатели на память:
Жаль, не будет работать на значениях, только на переменных.
Сравнение с округлением может споткнуться в случае, когда порядки разные, например, что-то типа 2 и 1,(9) или нормализованное число и денормализованное.
так что предлагаю не задумываться о сравнении, а оставить на шаге битовых операций для вещественных чисел
интересно, это может иметь какой-нибудь практический смысл, или судьба совершенных чисел повторится - красиво, но бесполезно?
достаточно мощный компьютер может предказать будущее
время лишено мистицизма - в том утверждении, что "никто не знает, что будет" - и, возможно, все "существующее в будущем" - "уже" существует давно
но это уже уводит мысль в направлении о копирастии, что информация должна быть свободной )))
И получается, что при достаточно длинном ключе не хватит не то, что времени на перебор, а еще и тупо энергии, даже если злоумышленник умудрится запитать свой мегакомп от Солнца. Тут уж как технологии не развивай - не вскроешь.
А еще можно вспомнить о "сроке годности" информации - через год взлома перебором скрытая информация может запросто потерять свою ценность.
Обратите внимание на раздел "Оценка предельных мощностей взлома" - энергии Солнца хватит лишь на 250-разрядный ключ.
А для типа Extended (80 бит) придётся вводить ^array[0..9]of Byte или ^array[0..4]of SmallWord и ксорить по частям.
type hack = ^Longint;
var t: longint;
...
t := hack(@x)^ - hack(@y)^;
if (t < 0) then t := -t;
isEQ := t < (1 shl n); // n - точность. чем меньше, тем точнее. погрешность в мантиссе, а знак и экспонента должны совпадать.
ну случай с нулем отдельно нужно обрабатывать.
и на значениях работать будет ;)
я о том, что, например, 2 and 3 не представляется таким же понятным действием, как, например 2 + 3. тогда как даже тригонометрические функции хорошо представимы соотношением углов и сторон треугольника, комплексные числа - как двумерная числовая величина, и т.д.
но для хора вещественных - самое то, что надо, браво инканус!