#author("2017-09-05T12:16:55+09:00","","")
#author("2017-09-05T19:58:31+09:00","","")
 #module m_plus_double
 #deffunc local init
 basis_large=100000.0*100000.0*100000.0*100000.0
 basis_small=100000.0*100000.0
 basis4muldiv=100000.0*100000.0
 return
 //	掛け算と割り算の対象はdoubleだけ
 #deffunc local mul_value  var p_value,var p4mul,double p_arg
 	p_value*=p_arg
 
 	if p_value>=basis_large{
 		p_value/=basis4muldiv
 		p4mul+=10
 	}
 	if p_value<=basis_small{
 		if p4mul>=1{
 			p_value*=basis4muldiv
 			p4mul-=10
 		}
 	}
 	return
 //	掛け算と割り算の対象はdoubleだけ
 #deffunc local div_value  var p_value,var p4mul,double p_arg
 	p_value/=p_arg
 
 	if p_value>=basis_large{
 		p_value/=basis4muldiv
 		p4mul+=10
 	}
 	if p_value<=basis_small{
 		if p4mul>=1{
 			p_value*=basis4muldiv
 			p4mul-=10
 		}
 	}
 	return
 #deffunc local sub_value var _p_value,var _p4mul,var _arg_value,var _arg4mul
 	set_place@m_plus_double _p_value,_p4mul,_arg_value,_arg4mul
 	_p_value-=_arg_value
 
 	if p_value>=basis_large{
 		p_value/=basis4muldiv
 		p4mul+=10
 	}
 	if p_value<=basis_small{
 		if p4mul>=1{
 			p_value*=basis4muldiv
 			p4mul-=10
 		}
 	}
 	return
 #deffunc local add_value var _p_value,var _p4mul,var _arg_value,var _arg4mul
 	set_place@m_plus_double _p_value,_p4mul,_arg_value,_arg4mul
 	_p_value+=_arg_value
 
 	if p_value>=basis_large{
 		p_value/=basis4muldiv
 		p4mul+=10
 	}
 	if p_value<=basis_small{
 		if p4mul>=1{
 			p_value*=basis4muldiv
 			p4mul-=10
 		}
 	}
 	return
 // 〔隣り合って置く〕place
 #deffunc local set_place var _p_value,var _p4mul,var _arg_value,var _arg4mul
 	if _p4mul>_arg4mul{
 		while _p4mul > _arg4mul
 			_arg4mul+=10
 			_arg_value/=basis4muldiv
 		wend
 	}else{
 		while _p4mul < _arg4mul
 			_p4mul+=10
 			_p_value/=basis4muldiv
 		wend
 	}
 	return
 
 #defcfunc local is_big var _p_value,var _p4mul,var _arg_value,var _arg4mul
 	if _p4mul>_arg4mul:return 1
 	if _p4mul<_arg4mul:return 0
 //	p4mul==arg4mulのはず
 	if _p_value>_arg_value:return 1
 	if _p_value<_arg_value:return 0
 	return -1
 #defcfunc local is_small var _p_value,var _p4mul,var _arg_value,var _arg4mul
 	if _p4mul>_arg4mul:return 0
 	if _p4mul<_arg4mul:return 1
 //	p4mul==arg4mulのはず
 	if _p_value>_arg_value:return 0
 	if _p_value<_arg_value:return 1
 	return -1
 #deffunc local dump var _p_value,var _p4mul
 	if _p4mul<=0{
 		logmes ""+_p_value+" 10^"+_p4mul
 	}else{
 		logmes ""+dbl_trim(_p_value)+" 10^"+_p4mul
 	}
 	return
 #global
 #module
 #defcfunc dbl_trim double p
 	n=str(p)
 	getstr piyo,n,0,'.'
 	return piyo
 #global
 /* 以下 TEST CODE 
 init@m_plus_double
 tmp_value=1.0
 tmp_mul=0
 
 repeat 30
 mul_value@m_plus_double tmp_value,tmp_mul,20.0
 dump@m_plus_double tmp_value,tmp_mul
 loop
 
 repeat 30
 div_value@m_plus_double tmp_value,tmp_mul,20.0
 dump@m_plus_double tmp_value,tmp_mul
 loop
 
 tmptmpA_value=123.0
 tmptmpA_mul=50
 tmptmpB_value=125.0
 tmptmpB_mul=70
 logmes ""+is_big@m_plus_double(tmptmpA_value,tmptmpA_mul,tmptmpB_value,tmptmpB_mul)
 tmptmpA_value=123.0
 tmptmpA_mul=70
 tmptmpB_value=125.0
 tmptmpB_mul=50
 logmes ""+is_big@m_plus_double(tmptmpA_value,tmptmpA_mul,tmptmpB_value,tmptmpB_mul)
 tmptmpA_value=123.0
 tmptmpA_mul=50
 tmptmpB_value=125.0
 tmptmpB_mul=50
 logmes ""+is_big@m_plus_double(tmptmpA_value,tmptmpA_mul,tmptmpB_value,tmptmpB_mul)
 tmptmpA_value=127.0
 tmptmpA_mul=50
 tmptmpB_value=125.0
 tmptmpB_mul=50
 logmes ""+is_big@m_plus_double(tmptmpA_value,tmptmpA_mul,tmptmpB_value,tmptmpB_mul)
 
 tmptmpA_value=123.0
 tmptmpA_mul=50
 tmptmpB_value=125.0
 tmptmpB_mul=70
 logmes ""+is_small@m_plus_double(tmptmpA_value,tmptmpA_mul,tmptmpB_value,tmptmpB_mul)
 tmptmpA_value=123.0
 tmptmpA_mul=70
 tmptmpB_value=125.0
 tmptmpB_mul=50
 logmes ""+is_small@m_plus_double(tmptmpA_value,tmptmpA_mul,tmptmpB_value,tmptmpB_mul)
 tmptmpA_value=123.0
 tmptmpA_mul=50
 tmptmpB_value=125.0
 tmptmpB_mul=50
 logmes ""+is_small@m_plus_double(tmptmpA_value,tmptmpA_mul,tmptmpB_value,tmptmpB_mul)
 tmptmpA_value=127.0
 tmptmpA_mul=50
 tmptmpB_value=125.0
 tmptmpB_mul=50
 logmes ""+is_small@m_plus_double(tmptmpA_value,tmptmpA_mul,tmptmpB_value,tmptmpB_mul)
 tmptmpA_value=127.0
 tmptmpA_mul=60
 tmptmpB_value=125.0
 tmptmpB_mul=50
 add_value@m_plus_double tmptmpA_value,tmptmpA_mul,tmptmpB_value,tmptmpB_mul
 dump@m_plus_double tmptmpA_value,tmptmpA_mul
 tmptmpA_value=127.0
 tmptmpA_mul=50
 tmptmpB_value=125.0
 tmptmpB_mul=60
 add_value@m_plus_double tmptmpA_value,tmptmpA_mul,tmptmpB_value,tmptmpB_mul
 dump@m_plus_double tmptmpA_value,tmptmpA_mul
 tmptmpA_value=127.0
 tmptmpA_mul=40
 tmptmpB_value=125.0
 tmptmpB_mul=40
 add_value@m_plus_double tmptmpA_value,tmptmpA_mul,tmptmpB_value,tmptmpB_mul
 dump@m_plus_double tmptmpA_value,tmptmpA_mul
 
 tmptmpA_value=127.0
 tmptmpA_mul=60
 tmptmpB_value=125.0
 tmptmpB_mul=50
 sub_value@m_plus_double tmptmpA_value,tmptmpA_mul,tmptmpB_value,tmptmpB_mul
 dump@m_plus_double tmptmpA_value,tmptmpA_mul
 tmptmpA_value=127.0
 tmptmpA_mul=50
 tmptmpB_value=125.0
 tmptmpB_mul=60
 sub_value@m_plus_double tmptmpA_value,tmptmpA_mul,tmptmpB_value,tmptmpB_mul
 dump@m_plus_double tmptmpA_value,tmptmpA_mul
 tmptmpA_value=127.0
 tmptmpA_mul=40
 tmptmpB_value=125.0
 tmptmpB_mul=40
 sub_value@m_plus_double tmptmpA_value,tmptmpA_mul,tmptmpB_value,tmptmpB_mul
 dump@m_plus_double tmptmpA_value,tmptmpA_mul
 //*/