下面是一个函数,用于显示不同精度的bigfloat数的平方根的不同舍入
import bigfloat
def sqrts(n,precis):
bigfloat.setcontext(bigfloat.precision(precis)) # set precision for the duration of the function
bigfloat.setcontext(bigfloat.RoundTiesToEven)
print(bigfloat.sqrt(n)," RoundTiesToEven")
bigfloat.setcontext(bigfloat.RoundTowardNegative)
print(bigfloat.sqrt(n)," RoundTowardNegative")
bigfloat.setcontext(bigfloat.RoundTowardZero)
print(bigfloat.sqrt(n)," RoundTowardZero")
bigfloat.setcontext(bigfloat.RoundAwayFromZero)
print(bigfloat.sqrt(n)," RoundAwayFromNegative")
bigfloat.setcontext(bigfloat.RoundTowardPositive)
print(bigfloat.sqrt(n)," RoundTowardPositive")
它似乎按预期工作。例如
In [5]: sqrts(2,200)
1.4142135623730950488016887242096980785696718753769480731766796 RoundTiesToEven
1.4142135623730950488016887242096980785696718753769480731766796 RoundTowardNegative
1.4142135623730950488016887242096980785696718753769480731766796 RoundTowardZero
1.4142135623730950488016887242096980785696718753769480731766809 RoundAwayFromNegative
1.4142135623730950488016887242096980785696718753769480731766809 RoundTowardPositive
下面是上面的一个广义版本,它试图显示一个更广泛的表达式类在各种精度下的舍入
import bigfloat
def bf(n,precis):
bigfloat.setcontext(bigfloat.precision(precis)) # set precision for the duration of the function
bigfloat.setcontext(bigfloat.RoundTiesToEven)
print(bigfloat.BigFloat(n)," RoundTiesToEven")
bigfloat.setcontext(bigfloat.RoundTowardNegative)
print(bigfloat.BigFloat(n)," RoundTowardNegative")
bigfloat.setcontext(bigfloat.RoundTowardZero)
print(bigfloat.BigFloat(n)," RoundTowardZero")
bigfloat.setcontext(bigfloat.RoundAwayFromZero)
print(bigfloat.BigFloat(n)," RoundAwayFromNegative")
bigfloat.setcontext(bigfloat.RoundTowardPositive)
print(bigfloat.BigFloat(n)," RoundTowardPositive")
但是有点不对劲,因为不同的舍入选项都产生相同的值。例如
In [15]: bf(bigfloat.sqrt(2),200)
1.4142135623730950488016887242096980785696718753769480731766809 RoundTiesToEven
1.4142135623730950488016887242096980785696718753769480731766809 RoundTowardNegative
1.4142135623730950488016887242096980785696718753769480731766809 RoundTowardZero
1.4142135623730950488016887242096980785696718753769480731766809 RoundAwayFromNegative
1.4142135623730950488016887242096980785696718753769480731766809 RoundTowardPositive
以及
In [16]: bf(bigfloat.log(2),200)
0.69314718055994530941723212145817656807550013436025525412068060 RoundTiesToEven
0.69314718055994530941723212145817656807550013436025525412068060 RoundTowardNegative
0.69314718055994530941723212145817656807550013436025525412068060 RoundTowardZero
0.69314718055994530941723212145817656807550013436025525412068060 RoundAwayFromNegative
0.69314718055994530941723212145817656807550013436025525412068060 RoundTowardPositive
如何修复bf()以获得不同舍入选项的正确值
目前没有回答
相关问题 更多 >
编程相关推荐