如何重现C双舍入问题

如何重现C双舍入问题,第1张

概述浮点精度在C中是有限的,对于新手程序员来说,在舍入值时经常会遇到麻烦. 在教学生时,通常有用的是演示浮点精度数舍入问题.您知道在所有C编译器上一致地证明这种舍入问题有哪些可能的方法? 首先,我们应该注意,在IEEE754浮点中,1.5,0.5和2.0都是精确表示的.因此,在这个具体的例子中,1.5永远不会是1.499999999999. 话虽如此,我认为要做的是让你的学生接触数字不完全可以代表.说 浮点精度在C中是有限的,对于新手程序员来说,在舍入值时经常会遇到麻烦.

在教学生时,通常有用的是演示浮点精度数舍入问题.您知道在所有C编译器上一致地证明这种舍入问题有哪些可能的方法?

解决方法 首先,我们应该注意,在IEEE754浮点中,1.5,0.5和2.0都是精确表示的.因此,在这个具体的例子中,1.5永远不会是1.499999999999.

话虽如此,我认为要做的是让你的学生接触数字不完全可以代表.说,1.1.

这是一个示例程序:

#include <iostream>#include <iomanip>int main() {   std::cout << std::setprecision(30);   double d1(1.1);   std::cout << d1 << "\n";   double d2(11);   double eps = d2/10 - d1;   std::cout << d2 << "\n";   std::cout << eps << "\n";   bool equal = (d1 == d2);   std::cout << equal << "\n";}

也许你可以通过这个程序,小心地说d1和d2都大约等于1.1.

对于高年级学生,你可以通过派系二进制算术,看看为什么1/2是可表示的,但是1/10不是.

编辑:我认为将点回归的方法是将重复的小数部分与重复的二进制分数进行比较.向学生显示十进制的1/7.在董事会做长期分工.指出你不能完全使用有限资源写下1/7.然后,要么向他们展示如何将1/10作为二进制分数写入,要么告诉他们不能使用有限资源写下它.

指出浮点数是有限的(32位),双精度数是有限的(64位).也许引入鸽子校长,并说你不能代表有限单词长度的无限集合(如所有有理数).

无论您尝试什么,请在这里报告,并告诉我们它是如何工作的.

总结

以上是内存溢出为你收集整理的如何重现C双舍入问题全部内容,希望文章能够帮你解决如何重现C双舍入问题所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/1220481.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-05
下一篇 2022-06-05

发表评论

登录后才能评论

评论列表(0条)

保存