forum.boolean.name

forum.boolean.name (http://forum.boolean.name/index.php)
-   Blitz3D (http://forum.boolean.name/forumdisplay.php?f=45)
-   -   Математка и C++ (http://forum.boolean.name/showthread.php?t=13570)

xRand 24.10.2010 13:01

Математка и C++
 
Вопрос состоит в следующем.

Стоит ли писать всю математику на C++, а затем выводить ее в библиотеку и прекреплять к проекту на блице?

Есть ли какие то ограничения на функции(и прочие прелести кода) используемые в C++ если потом экспортировать код в dll для блиц?

Есть ли статья по написаную dll для блица в C++?

maxturbo 24.10.2010 13:23

Ответ: Математка и C++
 
Вложений: 1
Вот почитай :)

IGR 24.10.2010 13:27

Ответ: Математка и C++
 
1) если ты не пишеш программу для расчета траэктории небесных тел для НАСА то нет !!
2) если 'пункт 1' <> 1 то хватит того что есть !!
3) в блице в юзерлибах есть .тхт файл, посмотри его !! Есть и другие примеры (у андреймэна на сайте отличный пример) !!
4) ??

Reks888 24.10.2010 13:37

Ответ: Математка и C++
 
Если я не ошибаюсь, то простые математические действия Blitz3d переводит сразу в машинный код, и быстродействие разных минус/плюс/умножить/делить совпадает с любым современным высоким языком программирования

xRand 24.10.2010 13:43

Ответ: Математка и C++
 
Цитата:

Сообщение от IGR (Сообщение 165812)
1) если ты не пишеш программу для расчета траэктории небесных тел для НАСА то нет !!
2) если 'пункт 1' <> 1 то хватит того что есть !!
3) в блице в юзерлибах есть .тхт файл, посмотри его !! Есть и другие примеры (у андреймэна на сайте отличный пример) !!
4) ??

но и не тетрис я пишу, так что хз=)

Цитата:

Сообщение от Reks888 (Сообщение 165814)
Если я не ошибаюсь, то простые математические действия Blitz3d переводит сразу в машинный код, и быстродействие разных минус/плюс/умножить/делить совпадает с любым современным высоким языком программирования

А операции со строками, другие функции (sin/cos sqrt log ну итд) да и просто обычные циклы/условия.

Reks888 24.10.2010 14:00

Ответ: Математка и C++
 
а другие переводятся в C++ код и там компилируется
Ты можешь разве что сделать тоже самое что и Марк, только хуже.
Если тебе важно быстродействие - пиши на BlitzMax+Xors3D
Разницы между Xors3D и Blitz3D почти нет, зато будет ООП, девятые директХ и скорость в тысячу раз выше.

xRand 24.10.2010 14:07

Ответ: Математка и C++
 
Цитата:

Сообщение от Reks888 (Сообщение 165817)
а другие переводятся в C++ код и там компилируется
Ты можешь разве что сделать тоже самое что и Марк, только хуже.

Если тебе важно быстродействие - пиши на BlitzMax+Xors3D
Разницы между Xors3D и Blitz3D почти нет, зато будет ООП, девятые директХ и скорость в тысячу раз выше.

Ты в этом уверен?:) в блице есть встроеный компилятор для с++ ?

Можно подойти к вопросу с другой стороны. То что я напишу на с++ можно будит использовать где угодно потом, не переписывая все заново.

Мне нужен именно Блиц3д.

Остается неоткрытым вопрос номер 2:
Есть ли какие то ограничения на функции(и прочие прелести кода) используемые в C++ если потом экспортировать код в dll для блиц?

Или еще какая то инфа по другим.

jimon 24.10.2010 14:11

Ответ: Математка и C++
 
ничего никуда не переводится, blitz3d очень тормозной в плане выполнения, если нужна скорость то думаю стоит вынести большие блоки вычислений в библиотеку

impersonalis 24.10.2010 16:14

Ответ: Математка и C++
 
Цитата:

Сообщение от xRand (Сообщение 165805)
Вопрос состоит в следующем.

Стоит ли писать всю математику на C++, а затем выводить ее в библиотеку и прекреплять к проекту на блице?

Есть ли какие то ограничения на функции(и прочие прелести кода) используемые в C++ если потом экспортировать код в dll для блиц?

Есть ли статья по написаную dll для блица в C++?

в первую очередь, блитц страдает не столько скростью, сколько точностью: штатного float-а мало на что хватит.

Рассмотрим пример, демонстрирующий нехватку разрядной сетки переменной стандартного типа float (на 4 байта).
Очевидно, что результат вычисления следующего выражения:
Код:

a:=14.143
k:=3
R:=1+(a-(a*k)/k)

равенд единице-
Код:

R:=1+(a-(a*k)/(k)=1+(a-a)=1+0=1
Рассмотрим результат вычислений указанного выражения при помощи 4-байтной float-переменной/ Выполним следующий листинг:
Код:

a#=14.143
k#=3
R#=1+(a-(a*k)/k)
DebugLog "float-test"
DebugLog R

Результат выполнения следующий:
Цитата:

float-test
0.999999
Пример демонстрирует, как быстро может упасть точность вычислений без использования аналитического упрощения вычисляемого выражения или вовлечения в расчеты переменных с большим объёмом внутренней памяти.
В большинстве практических случаев аналитический разбор (символьные преобразования) выражения является ресурсоёмкой и трудноинтегрируемой для конкретных вычислений задачей, таким образом, использование ....

Смотри также: http://forum.boolean.name/showthread.php?t=2451 - текст тамошней темы (особенно за моим авторством) следует творчески переосмыслить в свете вышесказанного.

xRand 24.10.2010 17:39

Ответ: Математка и C++
 
Ну что выводить в длл код не связанный с 3д графикой смысл имеет мы уже выяснили.

Теперь остаеца неясный следующий вопрос:
Есть ли какие то ограничения на функции(и прочие прелести кода) используемые в C++ если потом экспортировать код в dll для блиц?

Проще говоря какие операторы использовать нельзя?)

кто что может сказать по этому поводу?

еще такой вопрос:
вот допустим создали мы модель какую нить

Цитата:

CreateModel a

потом удалили ссылку на адрес.

a= 238423

но модель осталась в памяти.

удалить ее как то можно будит?)

impersonalis 24.10.2010 18:14

Ответ: Математка и C++
 
Цитата:

Сообщение от xRand (Сообщение 165846)
Ну что выводить в длл код не связанный с 3д графикой смысл имеет мы уже выяснили.

Теперь остаеца неясный следующий вопрос:
Есть ли какие то ограничения на функции(и прочие прелести кода) используемые в C++ если потом экспортировать код в dll для блиц?

Проще говоря какие операторы использовать нельзя?)

кто что может сказать по этому поводу?

еще такой вопрос:
вот допустим создали мы модель какую нить

есть особенности с передачей строк (в С++ в данном случае это массив типа char, созданный динамически) - читай мануал.

xRand 24.10.2010 19:11

Ответ: Математка и C++
 
Цитата:

Сообщение от impersonalis (Сообщение 165850)
есть особенности с передачей строк (в С++ в данном случае это массив типа char, созданный динамически) - читай мануал.

string юзать нельзя тоесть?

и все? или еще чтото есть?

.Squid 24.10.2010 23:28

Ответ: Математка и C++
 
Внутри своей либы можешь юзать что угодно. Но с блитцем надо общаться через char *.
А еще там какая-то неведомая фигня с типом bool. Я уже не помню что именно. Если товарищ Knightmare заглянет сюда, то скажет.

impersonalis 25.10.2010 01:07

Ответ: Математка и C++
 
Ну, в общем-то, можно и wchar и bool, просто следует понимать, что блитц это сможет обработать только как что-то из: строка (массив "байт-символ"), int, float, буффер (банк, считанное из которого так или иначе надо привести к указанным ранее типам, например: http://forum.boolean.name/showpost.p...8&postcount=10).
На строках я остановился потому, что в программу передаётся указатель. Поэтому надо проконтролировать, чтобы DLL не высвободила память ранее, чем программа перестанет работать с данным текстом. Возможно использовать либо статическую память (Кнайт поправит), или интерфейс, позволяющий не только получать значение, но и влиять на его существование: например получили указатель некторой функцией GET, сохранили/проанализировали текст, удалили некоторой фунцией DEL.
Поравьте, если ошибаюсь - с самописными DLL работаю не так часто.

Knightmare 25.10.2010 04:07

Ответ: Математка и C++
 
1) В качестве сток блитз получает\передает char*. Поэтому нет проблем с передачей, есть проблема с получением данных из DLL, т.к. память выделенная под буфер на стеке будет очищена при выходе из функции. Поэтому только в куче выделять строки для передачи в блитз. Но тогда может потечь память. Хороший вариант иметь статичную std::string (или аналог), и возвращать ее буфер. Тогда память будет менеджится непосредственно инстансом класса. Ну а блитз при получении строки делает ее копию, поэтому изменения строки в либе как бэ пофиг.
2) bool в топку. Блитз не умеет оперировать с однобайтовыми переменными, поэтому будет считывать 4 байта, соответственно будет верный младший байт и 3 байта мусора. Отсюда полезут глюки.
3) Нельзя понижать точность float'ов для ускорения математики. Блитз будет радостно кидать INF и NaN.
4) Можно передавать еще и объекты юзеровских типов, да. Не обязательно запихивать их в банки.
Как-то так короче. В любом случае в DLL стоит выносить что-то большое, типа там поиска пути и т.п. Иначе больше на вызовах функций потеряется (а блитз, сцуко, и тут не блещет).


Часовой пояс GMT +4, время: 06:58.

vBulletin® Version 3.6.5.
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
Перевод: zCarot