鱼C论坛

 找回密码
 立即注册
查看: 2712|回复: 2

[已解决]Python 为什么很简单的数都计算不准呢?

[复制链接]
发表于 2016-7-20 05:29:40 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
初涉Python 本人做数值模拟,发现了一个很纠结的问题,就是Python 在就在计算过程中出现了计算不准的问题。

例如A矩阵为:  [[0.5, -0.0025, 0], [0.5, 0, -0.0025], [0, 0.005, 0.005]]
B矩阵为:array([[   1. ,    1. ,    0.5], [-200. ,  200. ,  100. ],[ 200. , -200. ,  100. ]])
当我把两个矩阵点乘 np.dot(B,A)后出现了
array([[  1.00000000e+00,   0.00000000e+00,   0.00000000e+00],
           [  0.00000000e+00,   1.00000000e+00,   1.04083409e-17],
           [  0.00000000e+00,   1.04083409e-17,   1.00000000e+00]])
关于第二行第二列的 1.04083409e-17 我实在有些纠结,就是应该等于0才对啊!?
最佳答案
2016-7-20 08:15:33
计算机内部采用的是2进制,输入和输出的是10进制,在转换中会有误差,当然这个误差是极小的。任何计算机任何语言都存在此问题。如果你看到都是完全相符的结果,那是把小的偏差舍掉了。如1.00000000000000000001就直接显示为1或1.0了。
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2016-7-20 08:15:33 | 显示全部楼层    本楼为最佳答案   
计算机内部采用的是2进制,输入和输出的是10进制,在转换中会有误差,当然这个误差是极小的。任何计算机任何语言都存在此问题。如果你看到都是完全相符的结果,那是把小的偏差舍掉了。如1.00000000000000000001就直接显示为1或1.0了。
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2016-7-20 09:34:05 | 显示全部楼层
你理解np不够~
  1. import numpy as np

  2. A = np.array([[ 0.5   , -0.0025,  0.    ],
  3.               [ 0.5   ,  0.    , -0.0025],
  4.               [ 0.    ,  0.005 ,  0.005 ]])

  5. B = np.array([[   1. ,    1. ,    0.5],
  6.               [-200. ,  200. ,  100. ],
  7.               [ 200. , -200. ,  100. ]])

  8. BA=np.dot(B,A)
  9. print(BA)
复制代码


结果
  1. [[ 1.  0.  0.]
  2. [ 0.  1.  0.]
  3. [ 0.  0.  1.]]
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2026-2-21 20:39

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表