Извините, ничего не найдено.

Не расстраивайся! Лучше выпей чайку!
Регистрация
Справка
Календарь

Вернуться   forum.boolean.name > Программирование игр для компьютеров > Blitz3D > Полезные функции

Полезные функции Выкладываем полезные функции, чтоб не изобретать велосипед заново...

Ответ
 
Опции темы
Старый 01.01.2007, 16:49   #1
impersonalis
Зануда с интернетом
 
Аватар для impersonalis
 
Регистрация: 04.09.2005
Сообщений: 14,014
Написано 6,798 полезных сообщений
(для 20,935 пользователей)
Приближение числа

Function Get_approach2#(x#,eps%)
	Local res#,vLEFT#,vRIGHT#
	Local temp#=10^eps
	Local x_s#=Int(x*temp)/temp
	Local mzr%=x*temp-Int(x*(10^(eps-1)))*10
	Local flag%=mzr Mod 2
	vLEFT=x_s+flag*10^(-eps)
	vRIGHT=x_s+flag*10^(-eps)
	If Abs(x-vLEFT)<Abs(x-vRIGHT)
		res=vLEFT
	Else
		res=vRIGHT
	EndIf
	Return res
End Function
Get_approach2# возвращает ближайшее приближенное чётное число от аргумента x# с числом знаков после запятой eps%

Function Get_approach#(x#,eps%)

	Local res#
	Local temp#=10^(eps+1)
	Local x_s#=Int(x*temp)/temp
	Local mzr%=x*temp-Int(x*(10^(eps)))*10
	
	temp#=10^(eps)
	res=Int(x*temp)/temp
	If mzr>=5
		res=res+10^(-eps)
	EndIf

	Return res
End Function
Get_approach# возвращет приближенное (не обрубленное) число от аргумента x# с числом знаков после запятой eps%
__________________
http://nabatchikov.com
Мир нужно делать лучше и чище. Иначе, зачем мы живем? tormoz
А я растила сына на преданьях
о принцах, троллях, потайных свиданьях,
погонях, похищениях невест.
Да кто же знал, что сказка душу съест?
(Offline)
 
Ответить с цитированием
Старый 02.01.2007, 04:09   #2
impersonalis
Зануда с интернетом
 
Аватар для impersonalis
 
Регистрация: 04.09.2005
Сообщений: 14,014
Написано 6,798 полезных сообщений
(для 20,935 пользователей)
Re: Приближение числа

ВНИМАНИЕ
Вот за что я не люблю писать мат.проги на B3D за его windows-оподобную страсть показать себя умнее программиста. Как же он обожает округлять чиселки самостоятельно - кодом не корми.
В общем после долгих препирательств пришлось заменить часть кода. Таким образом:
Function Get_approach2#(x#,eps%)
	Local res#,vLEFT#,vRIGHT#


	Local x_s#=Float(Mid(Str(x),1,Len(Str(Int(x)))+1+eps))

	Local mzr%=Int(Mid(Str(x),Len(Str(Int(x)))+1+eps,1))

	
	Local flag%=mzr Mod 2
	vLEFT=x_s+flag*10^(-eps)
	vRIGHT=x_s+flag*10^(-eps)
	If Abs(x-vLEFT)<Abs(x-vRIGHT)
		res=vLEFT
	Else
		res=vRIGHT
	EndIf
	Return res
End Function
Теперь деление и прочие пертурбации с дробной частью убраны, путём преобразования числа в строку.

Это уже 3ее место в программе где приходится так выпендриваться: то сумма 6 целых чисел принимает вид х.9999, то 0.001 не прибавляется.т.к. это повлечёт переваливание числа за 0.5 - что может повлиять на его дальнейшую обработку более существенно...
__________________
http://nabatchikov.com
Мир нужно делать лучше и чище. Иначе, зачем мы живем? tormoz
А я растила сына на преданьях
о принцах, троллях, потайных свиданьях,
погонях, похищениях невест.
Да кто же знал, что сказка душу съест?
(Offline)
 
Ответить с цитированием
Старый 04.01.2007, 05:55   #3
impersonalis
Зануда с интернетом
 
Аватар для impersonalis
 
Регистрация: 04.09.2005
Сообщений: 14,014
Написано 6,798 полезных сообщений
(для 20,935 пользователей)
Re: Приближение числа

забыл напостить правку ко 2ой функции:
Function Get_approach#(x#,eps%)
	Local res#=Float(Mid(Str(x),1,Len(Str(Int(x)))+1+eps))
	Local mzr%=Int(Mid(Str(x),Len(Str(Int(x)))+2+eps,1))
	If mzr>=5
		res=res+10^(-eps)
	EndIf
	Return res
End Function
__________________
http://nabatchikov.com
Мир нужно делать лучше и чище. Иначе, зачем мы живем? tormoz
А я растила сына на преданьях
о принцах, троллях, потайных свиданьях,
погонях, похищениях невест.
Да кто же знал, что сказка душу съест?
(Offline)
 
Ответить с цитированием
Старый 04.01.2007, 16:20   #4
impersonalis
Зануда с интернетом
 
Аватар для impersonalis
 
Регистрация: 04.09.2005
Сообщений: 14,014
Написано 6,798 полезных сообщений
(для 20,935 пользователей)
Re: Приближение числа

Int(9.70)=10 ?!
такой подставы я вообще не ожидал... А я ещё филосовствовал об излишестве Floor-а...
Короче:
Function Get_approach#(x#,eps%)
	Local res#=Float(Mid(Str(x),1,Len(Str(Int(Floor(x))))+1+eps))
	Local mzr%=Int(Mid(Str(x),Len(Str(Int(Floor(x))))+2+eps,1))

	If mzr>=5
		res=res+10^(-eps)
	EndIf
	Return res
End Function

Function Get_approach2#(x#,eps%)
	Local res#,vLEFT#,vRIGHT#


	Local x_s#=Float(Mid(Str(x),1,Len(Str(Int(Floor(x))))+1+eps))

	Local mzr%=Int(Mid(Str(x),Len(Str(Int(Floor(x))))+1+eps,1))

	
	Local flag%=mzr Mod 2
	vLEFT=x_s+flag*10^(-eps)
	vRIGHT=x_s+flag*10^(-eps)
	If Abs(x-vLEFT)<Abs(x-vRIGHT)
		res=vLEFT
	Else
		res=vRIGHT
	EndIf
	Return res
End Function
__________________
http://nabatchikov.com
Мир нужно делать лучше и чище. Иначе, зачем мы живем? tormoz
А я растила сына на преданьях
о принцах, троллях, потайных свиданьях,
погонях, похищениях невест.
Да кто же знал, что сказка душу съест?
(Offline)
 
Ответить с цитированием
Старый 04.01.2007, 17:05   #5
alcoSHoLiK
Дэвелопер
 
Регистрация: 17.01.2006
Сообщений: 1,512
Написано 78 полезных сообщений
(для 110 пользователей)
Re: Приближение числа

Неугомонный)
(Offline)
 
Ответить с цитированием
Старый 18.01.2007, 03:10   #6
impersonalis
Зануда с интернетом
 
Аватар для impersonalis
 
Регистрация: 04.09.2005
Сообщений: 14,014
Написано 6,798 полезных сообщений
(для 20,935 пользователей)
Re: Приближение числа

Ржунимагу
Function Get_approach#(x#,eps%)
	Return Int(x*(10^eps))/Float(10^eps)
End Function
Команды b3d после C++ несколько непривычны
__________________
http://nabatchikov.com
Мир нужно делать лучше и чище. Иначе, зачем мы живем? tormoz
А я растила сына на преданьях
о принцах, троллях, потайных свиданьях,
погонях, похищениях невест.
Да кто же знал, что сказка душу съест?
(Offline)
 
Ответить с цитированием
Старый 23.01.2007, 02:26   #7
HolyDel
 
Регистрация: 26.09.2006
Сообщений: 6,035
Написано 1,474 полезных сообщений
(для 2,707 пользователей)
Re: Приближение числа

Сообщение от impersonalis
Int(9.70)=10 ?!
такой подставы я вообще не ожидал... А я ещё филосовствовал об излишестве Floor-а...
а шо-ж ожидать надо было?
(Offline)
 
Ответить с цитированием
Старый 23.01.2007, 02:48   #8
impersonalis
Зануда с интернетом
 
Аватар для impersonalis
 
Регистрация: 04.09.2005
Сообщений: 14,014
Написано 6,798 полезных сообщений
(для 20,935 пользователей)
Re: Приближение числа

На С++
9
__________________
http://nabatchikov.com
Мир нужно делать лучше и чище. Иначе, зачем мы живем? tormoz
А я растила сына на преданьях
о принцах, троллях, потайных свиданьях,
погонях, похищениях невест.
Да кто же знал, что сказка душу съест?
(Offline)
 
Ответить с цитированием
Старый 23.01.2007, 02:52   #9
HolyDel
 
Регистрация: 26.09.2006
Сообщений: 6,035
Написано 1,474 полезных сообщений
(для 2,707 пользователей)
Re: Приближение числа

Преобразовывает значение в ближайшее целое.

Это то же самое, что и автоматическое конвертирование типов Blitz.
Итак, две команды...

n = значение
n = Int( значение )

... делает то же самое, когда n имеет значение целого числа.

Если Int приложить к дробному числу – оно будет сконвертировано:

Int( "10" ) ........ результат 10
Int( "3.7" ) ....... результат 3, остановка на "." которая не может быть частью целого
Int( "junk3" ) .... результат 0, остановка на "j"

Int конвертирует дробное, приравнивая его к ближайшему целому числу.
ПОМНИТЕ: Это не традиционное значение Int в Basic.

Как насчет чисел, которые на одинаковом отдалении между целыми?
Округляется к ближайшему четному целому:

Int( 2.5 ) ... дает 2
Int( 3.5 ) ... дает 4

См. также: Floor и Ceil для других типов округления.
а в c++ ето просто typecast.
(Offline)
 
Ответить с цитированием
Старый 23.01.2007, 09:03   #10
jimon
 
Сообщений: n/a
Re: Приближение числа

так в C++ typecast из floatа в int отрезает в тупую не целую часть числа и все
тоесть 9.9 -> 9
 
Ответить с цитированием
Ответ


Опции темы

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Очень большие числа cHeRsAnYa Математика 11 09.02.2010 01:35
Числа is.SarCasm Blitz3D 8 03.10.2009 23:29
Большие числа. Randomize 2D-программирование 2 27.09.2009 14:41
Дробные числа, sin, cos и т.д. Romanzes JAVA Micro Edition 10 15.11.2008 14:06
Кратнось числа c0mrad Математика 15 16.01.2007 17:03


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


vBulletin® Version 3.6.5.
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Перевод: zCarot
Style crйe par Allan - vBulletin-Ressources.com