Тема: Оператор "=" для вещественных чисел
Всем доброго времени суток!
Сразу хочу подчеркнуть, что у меня нет большого опыта создания программ на AutoLisp.
Поэтому я обращаюсь за помощью к специалистам в этой области.
Документация по AutoLisp гласит:
Функция =
Проверяет равенство аргументов (рекомендуется использовать для чисел или строк).
(= <аргумент1> [<аргумент2> ... [<аргументN>]...])
Типы аргументов: любые.
Тип возвращаемого значения: логическое (т, если значения аргументов совпали, и nil, если не совпали).
Если задан только один аргумент, то возвращается т. Если количество аргументов 2 или больше, то при совпадении значений всех аргументов возвращается т, в противном случае — nil. При сравнении строк т выдается только в случае, когда длины всех строк равны и все строки посимвольно совпадают. При сравнении чисел т выдается также в том случае, когда один аргументы целые, а другие вещественные, но их значения совпадают.
Но есть примечание:
Внимание!
Следует иметь в виду, что значение, отображенное в командной строке, может не совпасть с реальным значением выражения. Вызвано это тем, что по умолчанию в вещественных числах система AutoCAD показывает в командной строке не более шести значащих цифр. Например, если бы в итоге вычисления должен был бы получиться результат 329.65142, то все равно вы бы увидели в командной строке только 329.651. Однако внутри программы AutoCAD оперирует числами с максимальной точностью (15 знаков после десятичной точки).
При создании кода на AutoLisp я столкнулся со странной, для меня, ситуацией:
фрагмент кода
(setq resultRealVal (* 2.12 3.13))
(setq resl (= resultRealVal 6.6356))
возвращает T, т.е. resl = T, так и должно быть, а вот следующие фрагменты
(setq resultRealVal (* 2.12 3.13 4.14))
(setq resl (= resultRealVal 27.471384))
и
(setq resultRealVal (* 2.12 3.13 4.14 5.15 6.16 7.17 8.18 9.19))
(setq resl (= resultRealVal 469738.818961468588204))
возвращают nil.
Подскажите, пожалуйста, почему я получаю такой результата? В чем особенность применения оператора "=" для вещественных чисел?
Заранее благодарю за помощь.
С уважением,
Андрей