python实现带误差传递的数学计算

import math

class Measurement(object):
    def __init__(self, val, perc):
        self.val = val
        self.perc = perc
        self.abs  = self.val * self.perc / 100.0
    def __repr__(self):
        return "Measurement (%r, %r)" % (self.val, self.perc)
    def __str__(self):
        return "%g+-%g%%" % (self.val, self.perc)
    def _addition_result(self, result, other_abs):
        new_perc = 100.0 *(math.hypot(self.abs, other_abs) / result)
        return Measurement(result, new_perc)
    def __add__(self, other):
        result = self.val + other.val
        return self._addition_result(result, other.abs)
    def __sub__(self, other):
        result = self.val - other.val
        return self._addition_result( result, other.abs)
    def _multiplication_result(self, result, other_perc):
        new_perc = math.hypot(self.perc, other_perc)
        return Measurement(result, new_perc)
    def __mul__(self, other):
        result = self.val * other.val
        return self._multiplication_result(result, other.perc)
    def __div__(self, other):
        result = self.val / other.val
        return self._multiplication_result(result, other.perc)

m1 = Measurement(100.0, 5.5)
m2 = Measurement(50, 2)
print "m1 = " , m1
print "m2 = ",  m2
print "m1 + m2 = ", m1 + m2
print "m1 - m2 = ", m1 - m2
print "m1 * m2 = ", m1 * m2
print "m1 / m2 = ", m1 / m2
print "(m1+m2) *(m1-m2) = " ,(m1+m2) * (m1-m2)
print "(m1+m2) / (m1+m2) = ", (m1-m2) / (m1+m2)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值