多精度通用加法子程序源码
    
        来源:互联网  时间:2016/12/13 4:41:52
    
    
        Type StrToZx                            '高精度数的结构头             ZhFhBz As Boolean                        '正负号标志,正为1,负为0             XsdWz As Long                          '小数点右边数字的长度。例1234.56中这个数是2             JzBz As Integer                       '标记数组存的是多少进制的数(十进制或其它进制数)             strlen As Long                         '操作数长度             Zx() As Long                           '存放操作数的数组             eE As Long                             '存放指数         End Type Public Function myADD(str1 As StrToZx, str2 As StrToZx) As StrToZx           '加法子程序,直接运算有符号整数,小数,和采用科学计数法表示的数         Dim cc() As Long                                                     ' 存放字串1,和相加后得数         Dim dd() As Long                                                     '存放字串2         Dim jw As Integer                                                    '进位标志         Dim jg As StrToZx                                                    '存放最终得数         Dim string1 As StrToZx         Dim string2 As StrToZx         If zwbz = True Then                 Exit Function         End If         string1 = str1         string2 = str2         If string1.ZhFhBz = False And string2.ZhFhBz = True Then                   '符号相反做减法             string1.ZhFhBz = True             jg = myMINUS(string2, string1)             GoTo line:         End If         If string1.ZhFhBz = True And string2.ZhFhBz = False Then                    '符号相反做减法             string2.ZhFhBz = True             jg = myMINUS(string1, string2)             GoTo line:         End If                                    x = myCompare(string1, g0)                                                '两个加数中其中一个为零时快速计算         y = myCompare(string2, g0)         If x = 0 Then            myADD = string2            Exit Function         End If         If y = 0 Then            myADD = string1            Exit Function         End If               Dim cszd As Integer                                                         '转换成十进制         cszd = 1         string1 = Zjzzh(string1, cszd)         string2 = Zjzzh(string2, cszd)         edq string1, string2                                                        '指数对位,参数必需为十进制数                                     R1 = string1.XsdWz         '整形 例:123.1234567855+1234567855.123转换成0000000123.1234567855 +1234567855.1230000000         L1 = string1.strlen - R1         R2 = string2.XsdWz         L2 = string2.strlen - R2         If L1 >= L2 Then                                                           '保存两个数中小数点前方数字长度的最大值             L = L1         Else             L = L2         End If         If R1 >= R2 Then                                                           '保存两个数中小数点后方数字长度的最大值             R = R1         Else             R = R2         End If         Zlen = L + R         ZlenTemp = Zlen + 1         ReDim cc(-1 To ZlenTemp + 2) As Long                                           '字串对位         ReDim dd(-1 To ZlenTemp + 2) As Long         j = L - L1 + 2         For i = 1 To string1.strlen                                                         '通过扩充方式进行字串对位,从左向右对位,但对位结果是向右看齐的             cc(j) = string1.Zx(i)             j = j + 1         Next         j = L - L2 + 2         For i = 1 To string2.strlen                                                      '把123.1234567855扩充成0000000123.1234567855             dd(j) = string2.Zx(i)             j = j + 1         Next         jw = 0         For i = ZlenTemp To 1 Step -1                                                     '加法运算             cc(i) = cc(i) + dd(i) + jw             If cc(i) >= 10 Then                 cc(i) = cc(i) - 10                 jw = 1             Else                 jw = 0             End If         Next         jg.JzBz = 1         jg.strlen = ZlenTemp         jg.XsdWz = R         If (string1.ZhFhBz = False) And (string2.ZhFhBz = False) Then                              '符号都为负,前面加负号             jg.ZhFhBz = False         Else             jg.ZhFhBz = True         End If         jg.Zx = cc()         jg.eE = string1.eE         jg = jdkz(jg, (jd + 4))         jg = qslqwl(jg) line:         myADD = jg         End Function |  
  | 
 | 
            
            
     
    
    
    
    
    
    
        - 明星图片
 
        
    
    
    
    
        - 相关文章
 
        -