Показать сообщение отдельно
Старый 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)
 
Ответить с цитированием