返回信息流update:
多谢各位的帮助,因为不是计算机专业没有系统学过计算机课程,所以时不时冒出一些很基本的问题。
本问题参考:
1. [IEEE 754](https://zh.wikipedia.org/wiki/IEEE_754)
2. [boost float-point comparison](http://www.boost.org/doc/libs/1_65_1/libs/math/doc/html/math_toolkit/float_comparison.html)
3. [boost floating-point Numbers](http://www.boost.org/doc/libs/1_65_1/libs/multiprecision/doc/html/boost_multiprecision/tut/floats.html)
4. [boost mutiprecision](http://www.boost.org/doc/libs/1_65_1/libs/multiprecision/doc/html/index.html)
5. [一个浮点数跨平台产生的问题](https://coolshell.cn/articles/11235.html)
有其他好的资料或想法欢迎补充:)
---
如何解决计算机计算小数的精度问题,C++有对小数进行不损失精度的方法吗,还是得自己写。这种错误在实际中会碰到吗,感觉很难注意到。
```c++
#include <iostream>
using namespace std;
int main()
{
float a = 5.1, b = 6.2;
float c = a + b;
float d = a * b;
float e = 51 * 62 / 100.0;
cout << "c:" << c << endl;
cout << "d:" << d << endl;
cout << (c == 11.3) << endl;
cout << (d == e) << endl;
cout << e << endl;
system("pause");
return 0;
}
```
这是一条镜像帖。来源:北邮人论坛 / cpp / #96834同步于 2017/11/17
该镜像源已超过 30 天没有更新,可能在源站已被删除。
CPP机器人发帖
关于计算机的小数运算
unimit
2017/11/17镜像同步20 回复
订阅后,新回复会通过你的通知中心匿名送达。
9 条回复
先浏览IEEE754标准。然后一切都自然明了。
https://www.csee.umbc.edu/~tsimo1/CMSC455/IEEE-754-2008.pdf
多谢nuanyangyang,好厉害,你怎么查到这个的,是羊村村长告诉你的吗?简直比Google好使,能不能顺便划下重点,我知道浮点误差的由来,但不知道标准里有没提到处理方法。
【 在 nuanyangyang 的大作中提到: 】
: 先浏览IEEE754标准。然后一切都自然明了。
: https://www.csee.umbc.edu/~tsimo1/CMSC455/IEEE-754-2008.pdf
对于某些对精度要求高的情况,代码运行到某个地方,想检查,应该怎么办呢?
【 在 Nroskill 的大作中提到: 】
: 小数不要用==
: 其实我觉得标准里就应该废弃double::operator==和float::operator==
重点什么的就不给画了。自己读。
你想精确地表示3.1吗?那用IEEE754是不能直接表示的。换别的数据类型吧。或者,你把它记成31*10^(-1)。
【 在 unimit 的大作中提到: 】
: 多谢nuanyangyang,好厉害,你怎么查到这个的,是羊村村长告诉你的吗?简直比Google好使,能不能顺便划下重点,我知道浮点误差的由来,但不知道标准里有没提到处理方法。
嗯,好的,我其实英语不太好,想着今晚看点剧就想偷懒做伸手党。nuanyangyang你是怎么找到这种资料的,我印象中你总能找到一些特别好的答案,你是如何做到的,能采访下吗?
【 在 nuanyangyang 的大作中提到: 】
: 重点什么的就不给画了。自己读。
: 你想精确地表示3.1吗?那用IEEE754是不能直接表示的。换别的数据类型吧。或者,你把它记成31*10^(-1)。
:
只要想一想现在用的浮点数是什么浮点数,是谁发明的就行了。然后想想这个浮点数的格式谁说了算。
【 在 unimit 的大作中提到: 】
: 嗯,好的,我其实英语不太好,想着今晚看点剧就想偷懒做伸手党。nuanyangyang你是怎么找到这种资料的,我印象中你总能找到一些特别好的答案,你是如何做到的,能采访下吗?
查了一下,标准库应该是没有的,可以用字符串自己实现一个
【 在 unimit 的大作中提到: 】
: 对于某些对精度要求高的情况,代码运行到某个地方,想检查,应该怎么办呢?
这种东西计算机沾边的课讲过好多次…
【 在 unimit 的大作中提到: 】
: 嗯,好的,我其实英语不太好,想着今晚看点剧就想偷懒做伸手党。nuanyangyang你是怎么找到这种资料的,我印象中你总能找到一些特别好的答案,你是如何做到的,能采访下吗?