[算法] 计算平方根 2
在接受采访时,公司技术XXX, 程序员“高级”负责采访张志贤张志贤问一个问题:
“请写一个C程序计算平方根 2 整数x“
张志贤呵呵一笑,心想:“科技公司在越南问一个问题,很容易. 这是不是有些新来的家伙编程!”
并在眨眼间张志贤带着下面的代码正确答案:
#include<math.h> #include<stdio.h> int main() { int x; printf("Input x: "); scanf("%d", &x); printf("Sqrt of %d = %fn", x, sqrt(x)); }
Input x: 3 Sqrt of 3 = 1.732051
节目边无 1 错误和正确的结果.
张志贤信心. 毫无疑问,该公司著名的XXX问这么愚蠢的问题! 它被认为是.
有经验的程序员的代码看起来张志贤和赞美: “你的基本!”. 张志贤高兴,并认为你必须确保 100% 开始工作. 就在还有一些其他的老程序员问:
“你回答的问题, 使用C库函数sqrt“这个时候
擦问题似乎更难. 张志贤开始思考. 过了一会儿,他开始挠头. 现在怎么算? 张志贤想了又想......
暂停! 面试官张志贤评论: “你还必须学习很多”. 张志贤伤心知道我滑. 然而, 无论它认为它应该滑出更多 1 什么是新的, 它要求面试官:
“我怎么能计算平方根? 难道我需要一个复杂的算法有很多行代码?”.
程序员“前辈”笑着回答: “计算机做一个快速计算, 而不是绝对的答案, 我能赶上它,我猜答案!”. 张志贤看起来愚蠢的脸, 老工程师从容微笑解释.
Y的平方根被定义为数x使得: X2 还有== X = Y / X. 如果x是X = Y结果 / X, 否则结果将是 1 X'为在x和y的范围/ X. 我不知道有多少,这些都是, 但我们有 1 想怎么弄 1 一些这大约是平均!
张志贤点头.
例: 计算平方根 2 的 3. 我猜的结果是 1.0. 这样的结果是不正确的, 如果答案是范围 1.0 和 3/1.0 = 2.0. 所需的平均时间 1 作为一个结果,我们有 1.5. 再试一次 1.5 和 3/1.5 = 2.0 作为一个结果,我们有 1.75! 多次迭代后会导致接近回答!
张志贤视线! 这位工程师笑着继续.
由于我们没有准确的结果, 应的迭代的数量将是无限的. 然而,在每次迭代, 我会尝试看看结果不够准确的要求还. 例如,如果当前的答案为x = 1.73, X2 = 2.99 我们只需要精度 2 逗号后的数, 然后 1.73 是合适的答案. 因此,我们将有一个程序,计算平方根 2 如下:
#include<math.h> #include<stdio.h> #define PRECISE 0.0001f double mysqrt(int x) { double guess = (double)x / 2; while (fabs(guess*guess - x)/x >= PRECISE) guess = (x/guess - guess) / 2 + guess; return guess; } int main(void) { int x; printf("Input x: "); scanf("%d", &x); printf("Sqrt of %d = %fn", x, mysqrt(x)); return 0; }
输入X: 3
开方的 3 = 1.732051
和开明张志贤!
CO代码成为帕斯卡?
这是很容易转移到你的帕斯卡. 这是不是不像很多都.
广告解释这种说法担心孩子: (晶圆厂(猜猜猜* – X)/X >= PRECISE)
命令检查的猜测不是精细的准确性. 猜作为碱的结果.