查找区间是否至少包含一个没有 math.h 的整数



对于一个类项目,我需要将一些音频剪辑分成更小的部分,为此我们提供了最小长度和最大长度,以确定这是否可能,我执行以下操作:

a = length/max
b = length/min

在数学上,我认为 [a,b] 至少包含一个整数,如果⌊b⌋ >= ⌈a⌉,但我不能使用 math.h 表示 floor() 和 ceil()。由于 a 和 b 总是正数,我可以对 floor() 使用类型转换,但我对如何做 ceil() 感到茫然。我想过使用 ((int)x)+1,但这会使整数四舍五入,这会破坏公式。

我想要一种方法来执行ceil()来解决我的问题,或者另一种方法来检查间隔是否至少包含一个整数。

您不需要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;
}

如果我理解你的问题没错,我想,在这种情况下你可以做ceil(a),然后检查结果是否小于b。因此,例如,对于区间 [1.3, 3.5],ceil(1.3) 将返回 2,这符合这个区间。

UPD你也可以做(b - a)。如果它> 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。要从 .6 开始向上舍入,您的舍入金额将是 1 - .6 = .4,您将执行int(x + .4)等。

您可以做类似的事情来获得ceil行为。将roundoff_amount设置为 0.99999...并做回合。您可以选择您的值以提供"附近"窗口,因为浮点数具有一些固有的不准确性,可能会阻止在添加分数后获得完美的整数值。

最新更新