gpt4 book ai didi

python - 为什么 Decimal(2**0.5) 没有给出预定义精度的数字?

转载 作者:太空宇宙 更新时间:2023-11-03 12:49:24 28 4
gpt4 key购买 nike

我正在做以下受此启发的 thread :

>>> from decimal import *
>>> import math
>>> getcontext().prec = 1000
>>> Decimal(2**0.5)
Decimal('1.4142135623730951454746218587388284504413604736328125')
>>> Decimal(math.sqrt(2))
Decimal('1.4142135623730951454746218587388284504413604736328125')
>>> Decimal(2).sqrt()
Decimal('1.414213562373095048801688724209698078569671875376948073176679737990732478462107038850387534327641572735013846230912297024924836055850737212644121497099935831413222665927505592755799950501152782060571470109559971605970274534596862014728517418640889198609552329230484308714321450839762603627995251407989687253396546331808829640620615258352395054745750287759961729835575220337531857011354374603408498847160386899970699004815030544027790316454247823068492936918621580578463111596668713013015618568987237235288509264861249497715421833420428568606014682472077143585487415565706967765372022648544701585880162075847492265722600208558446652145839889394437092659180031138824646815708263010059485870400318648034219489727829064104507263688131373985525611732204024509122770022694112757362728049573810896750401836986836845072579936472906076299694138047565482372899718032680247442062926912485905218100445984215059112024944134172853147810580360337107730918286931471017111168391658172688941975871658215212822951848847')
>>> 2**0.5
1.4142135623730951

为什么 Decimal(2**0.5) 不是 1000 位长?

最佳答案

2 ** 0.5 被计算为 float,然后转换为 Decimal。相反,从一开始就使用两个 Decimal:

>>> from decimal import Decimal, getcontext
>>> getcontext().prec = 100
>>> Decimal(2) ** Decimal('0.5')
Decimal('1.414213562373095048801688724209698078569671875376948073176679737990732478462107038850387534327641573')

使用 '0.5' 而不是 0.5 很重要,这样 Decimal 会自行解释 0.50.5 转换为 float 然后再转换为 Decimal 时没有任何中间精度损失。 (因为 0.52 ** -1,可能不会有任何精度损失,但安全总比后悔好。)

关于python - 为什么 Decimal(2**0.5) 没有给出预定义精度的数字?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16247924/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com