我想就一些建议如何优化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位小数,但如果情况并非如此,我肯定会选择你的解决方案(我把你的答案投给了:))。 –