请问 vb6 double 溢出 该如何处理,有什么解决方案吗?
金融行业,在进行特征值和特征向量计算时,由于存在矩阵,会将非常大的数值进行相乘,所得的数值超出的Double类型的数值范围,出现了溢出。如下:dblResult=dblR...
金融行业,在进行特征值和特征向量计算时,由于存在矩阵,会将非常大的数值进行相乘,所得的数值超出的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 的范围小很多。
*********************************************************************************************************************
Double(双精度浮点型)变量存储为 IEEE 64 位(8 个字节)浮点数值的形式,它的范围在负数的时候是从 -1.79769313486232E308 到 -4.94065645841247E-324,而正数的时候是从 4.94065645841247E-324 到 1.79769313486232E308。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 的范围小很多。
*********************************************************************************************************************
Double(双精度浮点型)变量存储为 IEEE 64 位(8 个字节)浮点数值的形式,它的范围在负数的时候是从 -1.79769313486232E308 到 -4.94065645841247E-324,而正数的时候是从 4.94065645841247E-324 到 1.79769313486232E308。Double 的类型声明字符是数字符号 (#)。
*********************************************************************************************************************
谢谢大家了,我在提问时也看过“高精度计算 ”及“大数字”相关的的算法,但是感觉比较复杂,的确问题很…………唉~~~ 展开
3个回答
展开全部
额,,,这个问题的确麻烦啊,建议使用c去编,c的灵活性很高,只是图形操作界面就不太好写了,或者你试试vb里的自定义类型,把多个double加在一个自定义类型里,不过这样运算又变麻烦了,哎,难啊
我查了下,在C#里有个decimal变量,是128位的变量,专门为财务设计的,但那不是vb的啊,的确有难度,先别关问题,我帮你找找办法
找到一个高精度计算,,,就是用编程的方法自己编写数据类型,再自己编写该类型的运算,不过这个实在很专业,恐怕不太现实,但也只有这个方法了,不过可能有人编过,所以,可以去找找相关代码
我建议还是得把数据分段存在多个数组里,再编写该数组的计算方法,目前也只有这个是最实际的,不知道楼主数学如何,这个也不是太难,稍微想想应该就可以
我查了下,在C#里有个decimal变量,是128位的变量,专门为财务设计的,但那不是vb的啊,的确有难度,先别关问题,我帮你找找办法
找到一个高精度计算,,,就是用编程的方法自己编写数据类型,再自己编写该类型的运算,不过这个实在很专业,恐怕不太现实,但也只有这个方法了,不过可能有人编过,所以,可以去找找相关代码
我建议还是得把数据分段存在多个数组里,再编写该数组的计算方法,目前也只有这个是最实际的,不知道楼主数学如何,这个也不是太难,稍微想想应该就可以
参考资料: http://baike.baidu.com/view/856859.html
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询