2 xiaodianer1111 xiaodianer1111 于 2015.07.18 22:03 提问

关于C++的精度问题与matlab的比较

编写程序时,循环过程中有一矩阵公式,使用matlab写时,是可以参与运算的,最后得出的迭代结果也是会变化的,但是用C++编写时,发现得出的结果每一次基本没有发生变化,然后该矩阵中都是分数或者是0,分母都很大,但是C++的精度不是要比matlab的精度要好一些吗?为什么此时的结果会基本不变呢?

5个回答

CSDNXIAON
CSDNXIAON   2015.07.18 22:06

matlab中的显示精度问题
----------------------同志你好,我是CSDN问答机器人小N,奉组织之命为你提供参考答案,编程尚未成功,同志仍需努力!

oyljerry
oyljerry   Ds   Rxr 2015.07.18 22:27

cpp使用的是float或者double吗?是不是cpp的计算公式会不会有计算正确

xiaodianer1111
xiaodianer1111 用的是double,使用矩阵计算的时候使用的eigen库,该矩阵每次循环时我输出来看了,竟然基本都是0的矩阵,但是在matlab中能让值有变化,计算公式也核对过了,照理来讲,C++的精度不该比matlab差啊
2 年多之前 回复
Evankaka
Evankaka   Ds   Rxr 2015.07.18 23:28

C++里头用double,另外,做矩阵运算,有可以涉及到复数,所以还要自己写复数类的运算

Evankaka
Evankaka 回复JYCM: 你进行矩阵运算之前,要先把所有数都转换成double,你这样做了没
2 年多之前 回复
xiaodianer1111
xiaodianer1111 我是用的eigen库,直接矩阵运算了,很奇怪这一矩阵输出来的都基本是0 了
2 年多之前 回复
caozhy
caozhy   Ds   Rxr 2015.07.18 23:36

要注意一个问题,c++里面,浮点数和整数乘除,会转换为整除和整乘。
比如
int x = 3;
int d = 11.8;
d = d / x; // d = 3.000

jack960330
jack960330 回复JYCM: 你被误导了
2 年多之前 回复
jack960330
jack960330 你这算么例子。。int d=11.8 d/x 你确定是整数和浮点数除法?你11.8直接转成11 放int了,这里存在自动类型转换
2 年多之前 回复
xiaodianer1111
xiaodianer1111 不好意思刚才理解错了,你的意思是精度上直接忽略掉了,由于分母过大直接接近0了?但是都设的doule类型的
2 年多之前 回复
xiaodianer1111
xiaodianer1111 这个地方我注意到了,还是很感谢
2 年多之前 回复
jack960330
jack960330   2015.07.20 10:01

楼主,我不清楚你什么问题,请你将问题详细信息描述清楚,你说的很大是多大?所谓都是分数或者0又是什么情况,你原来正确的答案 多少,等等情况必须讲清楚我们才能帮你分析原因

Csdn user default icon
上传中...
上传图片
插入图片