Реклама i
Стань нашим партнером - зарабатывай с нами!
| Правила | Регистрация | Пользователи | Сообщения за день |  Справка по форуму | Файлообменник |

Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > LISP > LISP - как переменной присвоить бесконечно большое значение?(не поверите, такое возможно)

LISP - как переменной присвоить бесконечно большое значение?(не поверите, такое возможно)

Ответ
Поиск в этой теме
Непрочитано 23.03.2012, 17:04 #1
LISP - как переменной присвоить бесконечно большое значение?(не поверите, такое возможно)
cj_lex
 
Регистрация: 15.12.2011
Сообщений: 29

Добрый день. ковырял лиспом клотоиду(элемент трассы autocad civil 3d), вытащил в переменную некоторое значение, которое по логике вещей является бесконечно большим. вот результаты "анализа":
Код:
[Выделить все]
Команда: (print a)
1.#INF

Команда: (type a)
REAL

;сравниваем эту переменную с очень большим числом
Команда: (> a 9999999999999999999999999999999999999999999999999999999999999.9)
T

;делим это число 1000000 раз на максимальное число
Команда: (repeat 1000000 (setq a (/ a 9999999999999999999999999999999999999999999999999999999999999.9)))
1.#INF

;снова сравниваем
Команда: (> a 9999999999999999999999999999999999999999999999999999999999999.9)
T

;начинаем чудить
Команда: (setq b (/ a a))
-1.#IND

;пытаемся понять что за число получилось в переменной b
Команда: (type b)
REAL

Команда: (> b 0)
nil

Команда: (< b 0)
nil

Команда: (= b 0)
nil
Собственно, вопрос: как задать это самое бесконечно большое значение переменной через SETQ и что же за число получилось в переменной b?
Просмотров: 2741
 
Непрочитано 23.03.2012, 17:10
#2
Дима_

Продуман
 
Регистрация: 22.02.2007
Питер
Сообщений: 2,840


Глюк (недочет) это обычный - какой практический смысл в таком "чудо" числе.
__________________
Когда в руках молоток все вокруг кажется гвоздями.
Дима_ вне форума  
 
Автор темы   Непрочитано 23.03.2012, 17:17
#3
cj_lex


 
Регистрация: 15.12.2011
Сообщений: 29


Цитата:
Сообщение от Дима_ Посмотреть сообщение
Глюк (недочет) это обычный - какой практический смысл в таком "чудо" числе.
смысл - расчет этой самой "клотоиды", правда, как именно, пока сам еще весьма смутно представляю.
cj_lex вне форума  
 
Непрочитано 23.03.2012, 17:21
#4
Дима_

Продуман
 
Регистрация: 22.02.2007
Питер
Сообщений: 2,840


Вытащили Вы данные в каком-то левом формате - который лисп "по ошибке" преобразовал во float (real), который естественно глючит безбожно.
__________________
Когда в руках молоток все вокруг кажется гвоздями.
Дима_ вне форума  
 
Автор темы   Непрочитано 23.03.2012, 17:42
#5
cj_lex


 
Регистрация: 15.12.2011
Сообщений: 29


Цитата:
Сообщение от Дима_ Посмотреть сообщение
Вытащили Вы данные в каком-то левом формате - который лисп "по ошибке" преобразовал во float (real), который естественно глючит безбожно.
вытаскивал чем-то вроде (vlax-get-property(nth i list_data)'RadiusOut)
(nth i list_data) - элемент сложного VLA объекта Civil'a
на глюк не похоже.
Код:
[Выделить все]
Команда: (setq c (/ 1 a))
0.0

Команда: (= c 0)
T
если ничего не путаю, это подтверждает то что число а бесконечно большое
cj_lex вне форума  
 
Непрочитано 23.03.2012, 17:56
1 | #6
Дима_

Продуман
 
Регистрация: 22.02.2007
Питер
Сообщений: 2,840


Цитата:
Сообщение от cj_lex Посмотреть сообщение
если ничего не путаю, это подтверждает то что число а бесконечно большое
Это подтверждает что такого числа не существует - обычное "глючное" поведение для типов с "неверноуказаной" типизацией - для компьютера любые данные - это просто набор нулей и едениц и если программа (компилятор/интерпритатор) "глюканула" с типом - рождаются новые математические законы. Просто в большинстве языков, от такого типа действий (когда 2+"2" складывают) защищает компилятор, а например в ассемблере это обычное дело:
Код:
[Выделить все]
mov al,2; в регистр al заносим 2
mov bl,'2'; в регистр bl '2'
add al,bl; складываем al bl
О ЧУДО 2+2=34!!!!
Вы примерно то-же самое сейчас описываете.
__________________
Когда в руках молоток все вокруг кажется гвоздями.
Дима_ вне форума  
 
Непрочитано 23.03.2012, 18:56
1 | #7
Vov.Ka


 
Регистрация: 21.07.2008
Луцьк
Сообщений: 179


1.0e+309
win 2k3 acad 2005
Vov.Ka вне форума  
 
Автор темы   Непрочитано 23.03.2012, 20:25
#8
cj_lex


 
Регистрация: 15.12.2011
Сообщений: 29


Понятненько)))
Цитата:
Сообщение от Vov.Ka Посмотреть сообщение
1.0e+309
- точно!!))
всем спасибо, вопрос исчерпан.
cj_lex вне форума  
Ответ
Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > LISP > LISP - как переменной присвоить бесконечно большое значение?(не поверите, такое возможно)

Размещение рекламы


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
XML и LISp - Такое возможно? Diman111 LISP 3 03.03.2008 19:06