c - 使用微 Controller 提取根

标签 c extract

我在一本书上看到了用单片机提取root的方法。我无法理解这个过程。为什么下面的代码中p=0x80?在这种情况下,如果我们的数量很小,它会做很多无用的循环,不是吗?

unsigned int math_sqrt(unsigned int x)
{ 
  unsigned char ans = 0,p = 0x80;
  while(p!=0){
     ans+=p;
     if(ans*ans>x)
       ans-=p;
     p = (unsigned char)(p/2);
  }
  return ans;
}

我是微 Controller 和C语言的新手,很抱歉我的英语表达可能有些问题。顺便问一下,我可以在 stm32 或 K60 等微 Controller 中使用 math.h 吗?谢谢。

最佳答案

只是对乔纳森的好答案的数学补充。

算法之外的基本原理是,uint16_t 的平方根是 uint8_t,这意味着 0 到 255 之间的数字。正如函数 square 和 square根都是单调的,可以使用二分法来找到最接近的解决方案。您只需从可能的间隔中间开始,即 128 或 0x80。然后,每次以一半大小的间隔进行迭代,这样很快(最多 8 个阶段)就可以达到大小为 1 的间隔:解决方案。

关于c - 使用微 Controller 提取根,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47614390/

相关文章:

c - 编译程序上没有使用 GDB 的符号表

java - 在 Android App 中编译 Latex 文档

python - 如何从链接中提取经度和纬度

JavaScript Jquery : extract string from value and compose URL with this string

正则表达式在jmeter中提取两个字符串文本

c++ - 为什么此代码重复地仅从字符串流中提取第一个字符串?

C访问控制实践

C 内存分配 : Fixed-length array in a struct in a struct

c++ - 在通过 ReadFile() 函数读取文件期间检查文件结尾

java - 如何从 Java 中的 url 获取 JSON 数据?