所以我正在做这个项目,在这个项目中,我必须使用二进制搜索将值插入公式并检查输出是否与我的 key 大致相等。因为我插入的这个公式与圆的面积有关,所以我需要它大约等于 key 的小数点后 7 位。
double binarySearch(min, max, key){
int mid;
if(max > min)
{
mid = (1 + (max-min)/2)/1;
if(funtion(mid) == key)
{
return mid;
}
if(function(mid) > key)
{
return binarySearch(min, mid-1, key);
}
if(function(mid) < key)
{
return binarySearch(mid+1, max, key);
}
return -1;
}
}
所以我知道检查 if(function(mid)==key) 毫无意义,因为它永远不会完全相等。我只是不确定如何返回精确到小数点后 7 位(或大约等于我们的 key )的答案。
最佳答案
有几种可能的方法,一种是检查差异是否小于误差,例如:
if(fabs(mid - key) <= 1e-7 ) {
return mid;
}
这仍然不完全正确,因为浮点变量也可以是无限的、NaN
和非正规的。如果您有一个不错的数学库 (>= C99),您可以(并且应该)使用 islessequal()
代替。
关于检查答案是否精确到小数点后 7 位,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50892056/