作业帮 > 综合 > 作业

请问 vb6 double 溢出 该如何处理,有什么解决方案吗?

来源:学生作业帮 编辑:作业帮 分类:综合作业 时间:2024/04/30 19:19:19
请问 vb6 double 溢出 该如何处理,有什么解决方案吗?
金融行业,在进行特征值和特征向量计算时,由于存在矩阵,会将非常大的数值进行相乘,所得的数值超出的Double类型的数值范围,出现了溢出.
如下:
dblResult = dblResult + dblA * dblB
此时
dblResult = 3.93125218574443E+173
dblA = 2.14966375646259E+183
dblB = -2.88460287768951E+178
现在仅仅 dblA * dblB 已经就超出 Double 的数值范围了,溢出了.我自己查了一下也没有比Double 数值范围更广的数据类型了.
我之前试着去进行分解计算等一些方法,可是可实施性很差的.想不出什么方法了,才想到让大家一起帮个忙,看看该如何解决这样的问题.
回复:鬏灵燊
即使是 C# 中的 decimal,decimal 关键字表示 128 位数据类型.同浮点型相比,decimal 类型具有更高的精度和更小的范围,这使它适合于财务和货币计算.但是它的精度虽高,但是范围(±1.0 E-28 到 ±7.9 E+28)还是比 Double 的范围小很多.
我在提问时也看过“高精度计算 ”及“大数字”相关的的算法,但是感觉比较复杂,的确问题很…………唉~
额,这个问题的确麻烦啊,建议使用c去编,c的灵活性很高,只是图形操作界面就不太好写了,或者你试试vb里的自定义类型,把多个double加在一个自定义类型里,不过这样运算又变麻烦了,哎,难啊
我查了下,在C#里有个decimal变量,是128位的变量,专门为财务设计的,但那不是vb的啊,的确有难度,先别关问题,我帮你找找办法
找到一个高精度计算,就是用编程的方法自己编写数据类型,再自己编写该类型的运算,不过这个实在很专业,恐怕不太现实,但也只有这个方法了,不过可能有人编过,所以,可以去找找相关代码
我建议还是得把数据分段存在多个数组里,再编写该数组的计算方法,目前也只有这个是最实际的,不知道楼主数学如何,这个也不是太难,稍微想想应该就可以