您现在的位置: 首页 > 网站导航收录 > 百科知识百科知识
为什么在C语言中计算结果会产生误差?
误差,数值,语言为什么在C语言中计算结果会产生误差?
发布时间:2020-12-06加入收藏来源:互联网点击:
为什么在C语言中计算结果会产生误差?
回答于 2019-09-11 08:43:50
回答于 2019-09-11 08:43:50
计算结果产生误差?我理解这句话就是计算结果和你想象的值不一样。
这分成几种情况:1. 整形计算 2. 浮点型计算
1.整形计算的时候,如果结果值和预期不一样,那么可以考虑是不是数值越界了。 如果计算出来的数值超过了其类型表达范围,那么值会被截断后存储在变量中。 比如char类型有效范围是-128~127,如果计算算出来的值是128,将它赋予给char型变量,那么它就变成了-128(因为128的十六进值为0x80,刚好和-128的补码一致)
2.浮点数计算的时候,分为单精度(float)、双精度(double),它们的小数位后有效位数不一样,前者少,后者多。 另外浮点数据额比较不能像整形那样用"=="判断是否相等,而是采用">"和"<"来判断(有点像数据的极限逼近的意思), 比如double v = 0.0; 我们判断v是否是0值: if( v > -0.000000001 && v < 0.0000000001)到底要在小数点后用多少个0,是根据你对数据的精度要求而定。
所以那些你所认为的误差,其实都是有原因的,再深入了解之后,你就不会觉得是C语言的误差了。
回答于 2019-09-11 08:43:50
告送我 哪个语言计算中没有误差
回答于 2019-09-11 08:43:50
首先要说的是不光C语言,几乎所有的编程语言的数值计算结果都可能产生误差,特别是对于浮点数的运算。只不过侧重于数值计算的,或提供了专门用于数值计算模块的编程语言能提供更好的精度而已。为什么会这样呢?这是由于计算机用于执行运算的单元(一般为CPU)使用二进制数来表示数值,有相关知识的朋友都应该知道不是所有的十进制数都可由二进制数精确表示出来,例如0.1就没有的二进制的精确表示形式。因此,当涉及到浮点数运算时,既使运算结果未溢出,其结果也可能已经是近似值了。
回答于 2019-09-11 08:43:50
计算机 是用二进制表示的,一般数是用十进制表示的,这样计算小数时,不可避免产生误差,因为两种不同进制的 小数 无法精确一一对应
回答于 2019-09-11 08:43:50
所有计算机语言,都用有限长度的存储空间存储数据,不同的计算机语言、或相同语言不同版本所定义的变量、存储空间也不一定相同。这样多次循环后,产生误差是必然的。
回答于 2019-09-11 08:43:50
浮点数所有语言都有误差,因为底层存储的就有误差,各语言有专门的数据类型精确处理浮点型
回答于 2019-09-11 08:43:50
算法不同的原因和他的数值 -------河南新华
上一篇:高二学生,记忆力不太好怎么办?
下一篇:返回列表
相关链接 |
||
网友回复(共有 0 条回复) |