检查答案是否精确到小数点后 7 位

标签 c recursion binary-search approximation

所以我正在做这个项目,在这个项目中,我必须使用二进制搜索将值插入公式并检查输出是否与我的 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/

相关文章:

java - 使用 Java 和 SQLite 的递归数据处理性能

algorithm - 从给定长度的数组中排列整数

python - binarySearch 与 in,意外结果 (Python)

c - 关于 C 指针范围

c - 对不同类型的 `fscanf()` 使用 switch case

c - 如何找到二叉搜索树右子树中的最小值

java - 返回对象而不是索引的二进制搜索的实现?

c - 结构复制的效率

php - SQL 树结构父子

c++ - multimap 的时间复杂度问题