Что означает "#INF" в дробной части значения переменной?

Программирование на Visual Basic, главный форум. Обсуждение тем программирования на VB 1—6.
Даже если вы плохо разбираетесь в VB и программировании вообще — тут вам помогут. В разумных пределах, конечно.
Правила форума
Темы, в которых будет сначала написано «что нужно сделать», а затем просьба «помогите», будут закрыты.
Читайте требования к создаваемым темам.
VBTerminator
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 415
Зарегистрирован: 19.11.2008 (Ср) 20:10

Что означает "#INF" в дробной части значения переменной?

Сообщение VBTerminator » 17.08.2011 (Ср) 17:54

Имеется в виду значения вида "3,#INF" в переменных типа Single. И ещё, как такое происходит и как этого можно избежать.

P. S.: В интернете поискать не удалось, потому что все поисковики (включая форумный) дружно игноируют знак решётки и думают, что меня интересуют файлы *.inf.

P. P. S.: ОС - Windows XP SP2, процессор - AMD Turion X2 Ultra Dual-Core Mobile ZM-86 64-х разрядный; в свойствах проекта в окне Compile->Advansed Optimisations все флажки не отмечены; патч бэйсика SP6 установлен.

FireFenix
Продвинутый гуру
Продвинутый гуру
Аватара пользователя
 
Сообщения: 1640
Зарегистрирован: 25.05.2007 (Пт) 10:24
Откуда: Mugen no Sora

Re: Что означает "#INF" в дробной части значения переменной?

Сообщение FireFenix » 17.08.2011 (Ср) 18:11

Вообще #inf = infinity , т.е. бесконечность.
Птицей Гермеса меня называют, свои крылья пожирая... сам себя я укрощаю
私はヘルメスの鳥 私は自らの羽根を喰らい 飼い慣らされる

VBTerminator
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 415
Зарегистрирован: 19.11.2008 (Ср) 20:10

Re: Что означает "#INF" в дробной части значения переменной?

Сообщение VBTerminator » 17.08.2011 (Ср) 18:48

А из-за чего такое происходит? И как вообще возможно "три целых бесконечность десятых"?
И самое главное - как избежать такого, ведь переменная с таким значением в сложных выражениях считается за нуль.

Кстати, ошибка возникает на участке кода следующего вида:
Код: Выделить всё
res1 = CSng(a.X - b \ 2) / c

где:
a - пользовательский тип с полями X, Y и Z типа Integer,
b - Long,
c - Single,
res1 - Single.

Этот кусок находится в функции, вызываемой через API другой программой (сделано с помощью FNDLL от Хакера), параметры передаются (без искажений - проверил печатью значений переменных в файл) в качестве аргументов этой функции; странный результат появляется на шаге деления выхода CSng (-720) на переменную "c" (10).

Хакер
Телепат
Телепат
Аватара пользователя
 
Сообщения: 16478
Зарегистрирован: 13.11.2005 (Вс) 2:43
Откуда: Казахстан, Петропавловск

Re: Что означает "#INF" в дробной части значения переменной?

Сообщение Хакер » 17.08.2011 (Ср) 20:00

VBTerminator писал(а):Этот кусок находится в функции, вызываемой через API другой программой (сделано с помощью FNDLL от Хакера), параметры передаются (без искажений - проверил печатью значений переменных в файл) в качестве аргументов этой функции; странный результат появляется на шаге деления выхода CSng (-720) на переменную "c" (10).

Нет, возможно дело как раз в этом. Там между делом должно сбрасываться состояние FP-сопроцессора. Если этого не делать, вылезают разные интересные глюки.

Выши минимальную часть проекта, достаточную для воспроизведения бага для анализа.
—We separate their smiling faces from the rest of their body, Captain.
—That's right! We decapitate them.

Хакер
Телепат
Телепат
Аватара пользователя
 
Сообщения: 16478
Зарегистрирован: 13.11.2005 (Вс) 2:43
Откуда: Казахстан, Петропавловск

Re: Что означает "#INF" в дробной части значения переменной?

Сообщение Хакер » 17.08.2011 (Ср) 20:04

VBTerminator писал(а):CSng (-720) на переменную "c" (10).

Убедись, что ерунда получается в самой функции, а не на вызывающей стороне. И если нет, попробуй с ByVal- перейти на ByRef-передачу параметров, и даже возврат передавать через ByRef.
—We separate their smiling faces from the rest of their body, Captain.
—That's right! We decapitate them.

VBTerminator
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 415
Зарегистрирован: 19.11.2008 (Ср) 20:10

Re: Что означает "#INF" в дробной части значения переменной?

Сообщение VBTerminator » 19.08.2011 (Пт) 9:36

К сожалению (или к счастью) ошибка неожиданно и бесследно исчезла, поэтому вычленить проблемные куски кода не смог.

iGrok
Артефакт VBStreets
Артефакт VBStreets
 
Сообщения: 4272
Зарегистрирован: 10.05.2007 (Чт) 16:11
Откуда: Сетевое сознание

Re: Что означает "#INF" в дробной части значения переменной?

Сообщение iGrok » 19.08.2011 (Пт) 12:58

VBTerminator писал(а):ошибка неожиданно и бесследно исчезла

Это - всегда "к сожалению", и достаточно часто - к конкретному геморрою в будущем. Если не повезёт.
label:
cli
jmp label

VBTerminator
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 415
Зарегистрирован: 19.11.2008 (Ср) 20:10

Re: Что означает "#INF" в дробной части значения переменной?

Сообщение VBTerminator » 19.08.2011 (Пт) 19:29

Всё, ошибка вернулась! :)

Во вложении находится две папки: lib с исходниками библиотеки и demo со скомпилированной библиотекой и исходниками программы, её использующей.

Ошибка возникает в функции Library.modCamera.V3DR_MoveCamera на присвоении sglWorldX, sglWorldY и sglWorldZ. Кстати, отладочный вывод из MsgBox в той функции сообщает:
Но при попытке присвоить вычисление переменной происходит ошибка деления на ноль:

sglWorldX = 1,#INF, sglWorldY = 1,#INF, sglWorldZ = 0


Дополнительная информация: IDE работает в VirtulBox, настроенном на эмуляцию одного ядра.
Вложения
проблемный проект.zip
(10.26 Кб) Скачиваний: 73

Хакер
Телепат
Телепат
Аватара пользователя
 
Сообщения: 16478
Зарегистрирован: 13.11.2005 (Вс) 2:43
Откуда: Казахстан, Петропавловск

Re: Что означает "#INF" в дробной части значения переменной?

Сообщение Хакер » 19.08.2011 (Пт) 19:37

Я поставил перед вычислением вот это:
Код: Выделить всё
MsgBox NewPos.X & " : " & lngRenderBufferX & " : " & sglVoxelScale

и получил вот это:
Код: Выделить всё
150 : 0 : 0


Соответственно, что ты хочешь получить, деля на ноль?
—We separate their smiling faces from the rest of their body, Captain.
—That's right! We decapitate them.


Вернуться в Visual Basic 1–6

Кто сейчас на конференции

Сейчас этот форум просматривают: AhrefsBot, Yandex-бот и гости: 94

    TopList