对于一个类项目,我需要将一些音频片段分成较小的部分,为此我们提供最小长度和最大长度,以确定这是否可行,我执行以下操作:
a = length/max
b = length/min
在数学上我认为[a,b]至少包含一个⌊b⌋ >= ⌈a⌉
的整数,但是我不能将math.h用于floor()和ceil()。由于a和b总是正的,我可以使用类型转换为floor(),但我不知道如何做ceil()。我想过使用((int)x)+1,但这会使整数向上舍入,这会破坏公式。
我想要一种方法来做ceil()来解决我的问题,或者另一种方法来检查一个区间是否包含至少一个整数。
答案 0 :(得分:1)
如果我理解你的问题是正确的,我想,你可以在这种情况下做ceil(a),然后检查结果是否小于b。因此,例如,对于区间[1.3,3.5],ceil(1.3)将返回2,这适合此区间。
<强> UPD 强> 你也可以做(b - a)。如果它&gt; 1,确保它们之间至少有一个整数。
答案 1 :(得分:1)
您不需要math.h
来执行发言权。请查看以下代码:
int length=5,min=2,max=3; // only an example of inputs.
int a = length/max;
int b = length/min;
if(a!=b){
//there is at least one integer in the interval.
}else{
if(length % min==0 || length % max==0 ){
//there is at least one integer in the interval.
}else{
//there is no integer in the interval.
}
}
上述示例的结果将是间隔中有一个整数。
您还可以在不使用math.h
的情况下执行ceil:
int a;
if(length % max == 0){
a = length / max;
}else{
a = (length / max) + 1;
}
答案 2 :(得分:1)
如果您发现自己编程Apple Basic或支持浮点数学的任何其他语言,编程中会有一个通用技巧。
您可以通过添加,然后截断来“舍入”数字,如下所示:
x = some floating value
rounded_x = int(x + roundoff_amount)
其中roundoff_amount
是最低分数与舍入之间的差异,以及1。
所以,要以.5为圆,你的round_off将是1 - .5 = .5,你会做int(x + .5)
。如果x是.5或.51那么结果变为1.0或1.01而int()
将其变为1.显然,如果x更高,那么你仍然会舍入到1,直到x变为1.5,当舍入将它带到2.要从.6开始向上舍入,您的舍入金额将为1 - .6 = .4,您将执行int(x + .4)
等。
你可以做类似的事情来获得ceil
行为。将roundoff_amount设置为0.99999 ...并进行回合。您可以选择您的值以提供“附近”窗口,因为浮点数具有一些固有的不准确性,可能会阻止在添加分数后获得完整的整数值。