ホーム » 2020 » 4月 » 11

日別アーカイブ: 2020/04/11

2020年4月
 1234
567891011
12131415161718
19202122232425
2627282930  

カテゴリー

アーカイブ

ブログ統計情報

  • 97,481 アクセス


計算式で時間が …

個人的なメモです.


以前 C で書いたコード(ベースは K&R 第2版 P.90 )を新しく書き換え.
少し機能も増やし,ある程度書き終えた.
既存のコードと動作速度を比べると「使えない」.チューニング前では 10 倍以上の時間.


データ内の計算式は次の様なものが多く存在する.

(((P/2-P9/2)*(P/2-P9/2))/((H9-H10-R1)*4)+(H9-H10-R1)/4)*(sin(asin(((P/2-P9/2)/2)/(((P/2-P9/2)*(P/2-P9/2))/((H9-H10-R1)*4)+(H9-H10-R1)/4))/6*5))+(P-((((P/2-P9/2)*(P/2-P9/2))/((H9-H10-R1)*4)+(H9-H10-R1)/4)*(sin(asin(((P/2-P9/2)/2)/(((P/2-P9/2)*(P/2-P9/2))/((H9-H10-R1)*4)+(H9-H10-R1)/4))/6*5)))*2)*0.982936188200278

R を求めるために同じ部分が 4 つある.

(((P/2-P9/2)*(P/2-P9/2))/((H9-H10-R1)*4)+(H9-H10-R1)/4)*(sin(asin(((P/2-P9/2)/2)/
(((P/2-P9/2)*(P/2-P9/2))/((H9-H10-R1)*4)+(H9-H10-R1)/4))/6*5))
+(P-(
(((P/2-P9/2)*(P/2-P9/2))/((H9-H10-R1)*4)+(H9-H10-R1)/4)*(sin(asin(((P/2-P9/2)/2)/
(((P/2-P9/2)*(P/2-P9/2))/((H9-H10-R1)*4)+(H9-H10-R1)/4))/6*5))
)*2)*0.982936188200278

次の様な判断を加えてやっとテストになる許容範囲(前コードでは 2 秒程度で,新しいコードではその倍位).

{
	if (vfp.length() <= 1)		{	return	FERROR ;	}
	TCHAR	c_0 = vfp[0] ;
	if (_istupper(c_0))		{	return	FERROR ;	}	
	}

2020/04/13
次の様なコード(elapsetm.hxx)を追加して計測すると,データにもよるが 2 倍程度.

	ElapseTime	et ;
	v_tstring	drop_files = ::DropFilesTo (hDropInfo) ;
	for (size_t index=0 ; index<drop_files.size() ; index++) {
		// ...
		}
	tstring	et_str = ::To_tstring(et.GetElapse()) ;

今回の変更では一部を除き機能は省いていないと思う.また,旧コードも最低限の新しい機能を付加している.
どちらのコードも共存可能にして,旧コードが使えない場合(今後の新しいコードなど)やループ外では新しいコードを使用する様にするか?


2020/04/15
文字列の終端が正しくないバグ
TcsCpy(val,bufSize,f_val.c_str()) ;
次の様にする必要がある.
TcsCpy (val,bufSize,f_val.c_str()) ;


数値の小数部の 0 を省くコードで,1.00 が 1000 になってしまったバグ.
'0' を指定された時 NOP に.t_tstrng.hxx

tstring	To_tstring_rz	(const tstring& str,const TCHAR sp=_T('\0'))	{
	if (sp == _T('0'))	{	return	str ;	}
	// ...
	}
Is this 投稿 useful? Useful Useless 0 of 0 people say this 投稿 is useful.