开发平台(Platform): (Ex: Win10, Linux, ...)
WinXP
编译器(Ex: GCC, clang, VC++...)+目标环境(跟开发平台不同的话需列出)
VS2005
额外使用到的函数库(Library Used): (Ex: OpenGL, ...)
Math.h
问题(Question):
sqrt错误
喂入的资料(Input):
25.0
预期的正确结果(Expected Output):
5.0
错误结果(Wrong Output):
1077478015.000000
程式码(Code):(请善用置底文网页, 记得排版,禁止使用图档)
目前在一个Lib内新建一些函式及功能,因为跟预期值不一样所以进侦错模式看
发现如果直接用A = sqrt(B),A的值会错掉
例如会得到sqrt(25.0)=1077478015.000000
但如果在外部把sqrt包过一层再呼叫数值就对了
例如
double my_sqrt(double input)
{
return sqrt(input);
}
这时候my_sqrt(25.0)=5.0
补充说明(Supplement):
这个系统在dos版本上,主流程使用的sqrt是系统内建的
中断使用的sqrt是用组语另外写的,问过主管说是为了避免一些stack混用的问题
但目前在windows平台上,不管在中断还是主流程用的都是math.h的sqrt
我不能理解直接呼叫sqrt跟再包过一层有什么差别?
基本上有关于浮点数内部计算都是用double