"Decimal测试案例文档1:精度范围下插入错误及越界判断问题"

需积分: 0 0 下载量 160 浏览量 更新于2024-01-10 收藏 991KB PDF 举报
本文档是对Decimal测试案例的总结,主要包括两个部分。第一部分是针对一个decimal类型属性,在插入数据时(未超精度范围),插入结果会出错的情况。第二部分是针对一个decimal类型属性,插入一个整数部分超过精度范围的数的情况。 在第一部分中,我们首先对一个decimal类型属性进行了插入数据的测试。在测试中,我们发现在插入数据时(未超精度范围),插入结果会出错。具体示例如下:我们首先创建了一个名为t1的表,包括c1和c2两个属性,其中c2是decimal类型的属性,精度为38位,小数位为0位,c1是主键。然后我们尝试向表中插入数据,值为(1, 99999999999999999999),结果显示出错(已知错误,其使用手册中有说明)。根据使用手册的说明,我们在上述数据后面加上小数,尝试再次插入,但结果依然错误。具体操作如下:向表中插入了两条数据,值分别为(2, 99999999999999999999.0)和(3, 99999999999999999999999999999999999999.0),结果仍然显示出错。不过,我们后来得知这个错误已经被解决。 在第二部分中,我们对另一种情况进行了测试,即插入一个整数部分超过精度范围的数据。在测试中,我们发现在这种情况下,未报错,没有越界判断。具体示例如下:我们首先创建了一个名为t1的表,包括c1和c2两个属性,其中c2是decimal类型的属性,精度为38位,小数位为0位。然后我们尝试向表中插入数据,值为(4, 99999999999999999999999999999999999999),结果未显示出错,也未进行越界判断。 综上所述,本文档总结了对Decimal测试案例的两种情况进行的测试,分别是在插入数据时(未超精度范围),插入结果会出错的情况,以及插入一个整数部分超过精度范围的数据的情况。在测试中,我们发现了一些问题,并且一些问题也得到了解决。这些测试结果对于我们更好地理解和使用Decimal类型属性具有一定的指导意义。

import decimal def calculate_pi(): decimal.getcontext().prec = 35 pi = decimal.Decimal() k = while True: term = decimal.Decimal((-1) ** k) * (decimal.Decimal(2) ** (decimal.Decimal(5) * decimal.Decimal(k))) / (decimal.Decimal(4 * k + 1) * decimal.Decimal(math.factorial(k)) ** 2 * decimal.Decimal(396 ** (4 * k))) pi += term if abs(term) < decimal.Decimal(1e-35): break k += 1 return pi * decimal.Decimal(2 ** 6) def calculate_tan(x): decimal.getcontext().prec = 35 tan = decimal.Decimal() k = while True: term = decimal.Decimal((-1) ** k) * decimal.Decimal(2 ** (2 * k + 1)) * decimal.Decimal((2 ** (2 * k + 1) - 1)) * decimal.Decimal(x ** (2 * k + 1)) / decimal.Decimal(math.factorial(2 * k + 1)) tan += term if abs(term) < decimal.Decimal(1e-35): break k += 1 return tan def calculate_pi_with_tan(): decimal.getcontext().prec = 35 pi = decimal.Decimal() k = while True: term = decimal.Decimal((-1) ** k) * (decimal.Decimal(2) ** (decimal.Decimal(5) * decimal.Decimal(k))) / (decimal.Decimal(4 * k + 1) * decimal.Decimal(math.factorial(k)) ** 2 * decimal.Decimal(396 ** (4 * k))) * calculate_tan(decimal.Decimal(1) / decimal.Decimal(239)) pi += term if abs(term) < decimal.Decimal(1e-35): break k += 1 return pi * decimal.Decimal(2 ** 6) def kahan_sum(numbers): decimal.getcontext().prec = 35 sum = decimal.Decimal() c = decimal.Decimal() for number in numbers: y = number - c t = sum + y c = (t - sum) - y sum = t return sum pi = calculate_pi_with_tan() pi = kahan_sum([pi] * 10) print(pi) 这段代码有一些缺漏,请补充以便它计算出pi的值

2023-03-10 上传