如何重现C双舍入问题
发布时间:2020-12-16 10:29:02 所属栏目:百科 来源:网络整理
导读:浮点精度在C中是有限的,对于新手程序员来说,在舍入值时经常会遇到麻烦. 在教学生时,通常有用的是演示浮点精度数舍入问题.您知道在所有C编译器上一致地证明这种舍入问题有哪些可能的方法? 解决方法 首先,我们应该注意,在IEEE754浮点中,1.5,0.5和2.0都是精确
浮点精度在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位).也许引入鸽子校长,并说你不能代表有限单词长度的无限集合(如所有有理数). 无论您尝试什么,请在这里报告,并告诉我们它是如何工作的. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |