我想就一些建議如何優化while循環如下:浮點比較
double minor_interval = 0.1;
double major_interval = 1.0;
double start = 0.0;
double finish = 10.0;
printf("Start\r\n");
while (start < finish)
{
printf("Minor interval: %.20f\r\n", start);
double m = fmod(start, major_interval);
printf("m: %.20f\r\n", m);
if (m == 0)
printf("At major interval: %.20f\r\n", start);
start += minor_interval;
}
printf("Finished\r\n");
從本質上講,我在環由微小的間隔遞增計數器,想如果我處於主要區間,則每次都知道循環。把它畫成毫米間隔的標尺,每當我到一個主要的間隔時,我想畫一釐米。鑑於浮點運算的不準確性,我如何修改上述循環來實現我需要的功能?我嘗試了使用容差比較模數結果的不同方法,但沒有運氣。請注意,次要間隔和主要間隔可以是任何值,即小數= 0.4和大數= 1.6(以畫四分之一英里增量)。
在此先感謝。
如果您的號碼是唯一正確的,以2小數點,你爲什麼不乘以100的所有號碼,去了很精確的整數算術? 對於整數,[div](http://www.cplusplus.com/reference/clibrary/cstdlib/div/)或[ldiv](http://www.cplusplus.com/reference/clibrary/cstdlib/ldiv/ )。 –
@Ron英寸秤通常會有1/8或0.125的增量。爲什麼在解決不完美的解決方案時很容易避免像你所建議的那樣限制。 –
@大衛我避免了浮點運算,除非無法避免,或者在整數運算中實現效率很高。我只是建議數字是否限制在2位小數,但如果情況並非如此,我肯定會選擇你的解決方案(我把你的答案投給了:))。 –