在python中如何计算很长的一个整数乘以一个非常接近零的很小的一个数例如:a是长整数,b是浮点数a=3**123323b=0.13**324325求 a*b,我算的是结果是0,我的意思是,a和b是从屏幕上输入的,因此b会被

来源:学生作业帮助网 编辑:六六作业网 时间:2024/11/23 20:50:29
在python中如何计算很长的一个整数乘以一个非常接近零的很小的一个数例如:a是长整数,b是浮点数a=3**123323b=0.13**324325求a*b,我算的是结果是0,我的意思是,a和b是从屏

在python中如何计算很长的一个整数乘以一个非常接近零的很小的一个数例如:a是长整数,b是浮点数a=3**123323b=0.13**324325求 a*b,我算的是结果是0,我的意思是,a和b是从屏幕上输入的,因此b会被
在python中如何计算很长的一个整数乘以一个非常接近零的很小的一个数
例如:a是长整数,b是浮点数
a=3**123323
b=0.13**324325
求 a*b,我算的是结果是0,
我的意思是,a和b是从屏幕上输入的,因此b会被认作0,怎样调节精度,使它可以被运算。我前面说的不清楚。

在python中如何计算很长的一个整数乘以一个非常接近零的很小的一个数例如:a是长整数,b是浮点数a=3**123323b=0.13**324325求 a*b,我算的是结果是0,我的意思是,a和b是从屏幕上输入的,因此b会被
python 3.2可以用内置的decimal高精度实数模块

# -*- coding:UTF-8 -*-
import decimal
decimal.getcontext().prec=200 #200数位精度
a=decimal.Decimal(3)**decimal.Decimal(123323)
b=decimal.Decimal('0.13')**decimal.Decimal('324325')
print('\t{}\n*\n\t{}\n=\n\t{}'.format(a,b,a*b))


输出
>>>
1.0580246667188824271913168051622395865019183845414805481031905972109045173989899823133323278995752527235304667074427574782893102545428586466473016751341295216536176276017699142425172412864417270258818E+58840
*
4.7614246375708084311798542896953748676842902955614645510524621531010498656287008792909075916910899666155420657277394271571681636228412127263118451395440991242288410666335749575430087463810155494163691E-287371
=
5.0377047152729301420944880198230739560889642797996835618622967033179721708732353839970371126283680796466358080919145363745004534970704032352604175204920473255485436558304392155356717364540080252448283E-228531
>>>



所谓“屏幕输入”,就是标准输入流输入,与大数都无关,属于基本数据操作.
a=decimal.Decimal(input("输入a:")); #所谓的屏幕输入

这里b已经等于0 了

这种问题需要自己想办法保留住精度啊
a=3**123323
b=13**324325
c=100**324325
a*b/c 就可以啦,实际上结果还是为0;这个时候我想到了用对数来算
from math import log
log(a,10)+log(b,10)-log(c,10)
得到-228530.29776729218
所以答...

全部展开

这种问题需要自己想办法保留住精度啊
a=3**123323
b=13**324325
c=100**324325
a*b/c 就可以啦,实际上结果还是为0;这个时候我想到了用对数来算
from math import log
log(a,10)+log(b,10)-log(c,10)
得到-228530.29776729218
所以答案是10的-228530.29776729218次方
或者 10^-228530 * 10^-0.2977672918
最后结果:
0.5037704715850401*10^-228530

收起

print float(a*b)没用,结果显示为long int too large to convert to float,怎么破?我用的2.7.1,正常 你是用Python Shell直接编辑的还是,新建窗口保存后,F5调试的我用的是python3.2.3,新建窗口保存后,F5调试的,不过主要问题我感觉应该是是保留住精度吧那我就不清楚了 我用2.7.1正常输出结果...

全部展开

print float(a*b)

收起