home *** CD-ROM | disk | FTP | other *** search
/ ARM Club 1 / ARM_CLUB_CD.iso / contents / apps / clib / progs / meschach / !Meschach / c / torture < prev    next >
Unknown  |  1994-08-04  |  27.5 KB

open in: MacOS 8.1     |     Win98     |     DOS

view JSON data     |     view as text


This file was not able to be converted.
This format is not currently supported by dexvert.

ConfidenceProgramDetectionMatch TypeSupport
100% file data default



hex view
+--------+-------------------------+-------------------------+--------+--------+
|00000000| 7d 0a 0a 0a 2f 2a 20 73 | 70 72 6f 77 5f 73 65 74 |}.../* s|prow_set|
|00000010| 5f 76 61 6c 20 2d 2d 20 | 73 65 74 73 20 74 68 65 |_val -- |sets the|
|00000020| 20 6a 2d 74 68 20 63 6f | 6c 75 6d 6e 20 65 6e 74 | j-th co|lumn ent|
|00000030| 72 79 20 6f 66 20 74 68 | 65 20 73 70 61 72 73 65 |ry of th|e sparse|
|00000040| 20 72 6f 77 20 72 0a 20 | 20 20 2d 2d 20 4e 6f 74 | row r. | -- Not|
|00000050| 65 3a 20 64 65 73 74 72 | 6f 79 73 20 74 68 65 20 |e: destr|oys the |
|00000060| 75 73 75 61 6c 20 63 6f | 6c 75 6d 6e 20 26 20 72 |usual co|lumn & r|
|00000070| 6f 77 20 61 63 63 65 73 | 73 20 70 61 74 68 73 20 |ow acces|s paths |
|00000080| 2a 2f 0a 64 6f 75 62 6c | 65 20 20 73 70 72 6f 77 |*/.doubl|e sprow|
|00000090| 5f 73 65 74 5f 76 61 6c | 28 72 2c 6a 2c 76 61 6c |_set_val|(r,j,val|
|000000a0| 29 0a 53 50 52 4f 57 20 | 20 20 2a 72 3b 0a 69 6e |).SPROW | *r;.in|
|000000b0| 74 20 20 20 20 20 6a 3b | 0a 64 6f 75 62 6c 65 20 |t j;|.double |
|000000c0| 20 76 61 6c 3b 0a 7b 0a | 20 20 20 69 6e 74 20 20 | val;.{.| int |
|000000d0| 69 64 78 2c 20 69 64 78 | 32 2c 20 6e 65 77 5f 6c |idx, idx|2, new_l|
|000000e0| 65 6e 3b 0a 20 20 20 0a | 20 20 20 69 66 20 28 20 |en;. .| if ( |
|000000f0| 21 20 72 20 29 0a 20 20 | 20 20 20 65 72 72 6f 72 |! r ). | error|
|00000100| 28 45 5f 4e 55 4c 4c 2c | 22 73 70 72 6f 77 5f 73 |(E_NULL,|"sprow_s|
|00000110| 65 74 5f 76 61 6c 22 29 | 3b 0a 20 20 20 0a 20 20 |et_val")|;. . |
|00000120| 20 69 64 78 20 3d 20 73 | 70 72 6f 77 5f 69 64 78 | idx = s|prow_idx|
|00000130| 28 72 2c 6a 29 3b 0a 20 | 20 20 69 66 20 28 20 69 |(r,j);. | if ( i|
|00000140| 64 78 20 3e 3d 20 30 20 | 29 0a 20 20 20 7b 20 20 |dx >= 0 |). { |
|00000150| 20 20 72 2d 3e 65 6c 74 | 5b 69 64 78 5d 2e 76 61 | r->elt|[idx].va|
|00000160| 6c 20 3d 20 76 61 6c 3b | 20 20 72 65 74 75 72 6e |l = val;| return|
|00000170| 20 76 61 6c 3b 20 20 20 | 20 20 7d 0a 20 20 20 2f | val; | }. /|
|00000180| 2a 20 65 6c 73 65 20 2a | 2f 20 69 66 20 28 20 69 |* else *|/ if ( i|
|00000190| 64 78 20 3c 20 2d 31 20 | 29 0a 20 20 20 7b 0a 20 |dx < -1 |). {. |
|000001a0| 20 20 20 20 20 2f 2a 20 | 73 68 69 66 74 20 26 20 | /* |shift & |
|000001b0| 69 6e 73 65 72 74 20 6e | 65 77 20 76 61 6c 75 65 |insert n|ew value|
|000001c0| 20 2a 2f 0a 20 20 20 20 | 20 20 69 64 78 20 3d 20 | */. | idx = |
|000001d0| 2d 28 69 64 78 2b 32 29 | 3b 20 20 20 2f 2a 20 74 |-(idx+2)|; /* t|
|000001e0| 68 69 73 20 69 73 20 74 | 68 65 20 69 6e 74 65 6e |his is t|he inten|
|000001f0| 64 65 64 20 69 6e 73 65 | 72 74 69 6f 6e 20 69 6e |ded inse|rtion in|
|00000200| 64 65 78 20 2a 2f 0a 20 | 20 20 20 20 20 69 66 20 |dex */. | if |
|00000210| 28 20 72 2d 3e 6c 65 6e | 20 3e 3d 20 72 2d 3e 6d |( r->len| >= r->m|
|00000220| 61 78 6c 65 6e 20 29 0a | 20 20 20 20 20 20 7b 0a |axlen ).| {.|
|00000230| 20 20 20 20 20 20 20 20 | 20 72 2d 3e 6c 65 6e 20 | | r->len |
|00000240| 3d 20 72 2d 3e 6d 61 78 | 6c 65 6e 3b 0a 20 20 20 |= r->max|len;. |
|00000250| 20 20 20 20 20 20 6e 65 | 77 5f 6c 65 6e 20 3d 20 | ne|w_len = |
|00000260| 6d 61 78 28 32 2a 72 2d | 3e 6d 61 78 6c 65 6e 2b |max(2*r-|>maxlen+|
|00000270| 31 2c 35 29 3b 0a 20 20 | 20 20 20 20 20 20 20 69 |1,5);. | i|
|00000280| 66 20 28 6d 65 6d 5f 69 | 6e 66 6f 5f 69 73 5f 6f |f (mem_i|nfo_is_o|
|00000290| 6e 28 29 29 20 7b 0a 20 | 20 20 20 20 20 20 20 20 |n()) {. | |
|000002a0| 20 20 20 6d 65 6d 5f 62 | 79 74 65 73 28 54 59 50 | mem_b|ytes(TYP|
|000002b0| 45 5f 53 50 52 4f 57 2c | 72 2d 3e 6d 61 78 6c 65 |E_SPROW,|r->maxle|
|000002c0| 6e 2a 73 69 7a 65 6f 66 | 28 72 6f 77 5f 65 6c 74 |n*sizeof|(row_elt|
|000002d0| 29 2c 0a 20 20 20 20 20 | 20 20 20 20 20 20 20 20 |),. | |
|000002e0| 20 20 20 20 20 20 20 20 | 20 20 20 6e 65 77 5f 6c | | new_l|
|000002f0| 65 6e 2a 73 69 7a 65 6f | 66 28 72 6f 77 5f 65 6c |en*sizeo|f(row_el|
|00000300| 74 29 29 3b 20 0a 20 20 | 20 20 20 20 20 20 20 7d |t)); . | }|
|00000310| 0a 20 20 20 20 20 20 20 | 20 20 0a 20 20 20 20 20 |. | . |
|00000320| 20 20 20 20 72 2d 3e 65 | 6c 74 20 3d 20 52 45 4e | r->e|lt = REN|
|00000330| 45 57 28 72 2d 3e 65 6c | 74 2c 6e 65 77 5f 6c 65 |EW(r->el|t,new_le|
|00000340| 6e 2c 72 6f 77 5f 65 6c | 74 29 3b 0a 20 20 20 20 |n,row_el|t);. |
|00000350| 20 20 20 20 20 69 66 20 | 28 20 21 20 72 2d 3e 65 | if |( ! r->e|
|00000360| 6c 74 20 29 20 20 20 20 | 20 20 20 20 2f 2a 20 63 |lt ) | /* c|
|00000370| 61 6e 27 74 20 61 6c 6c | 6f 63 61 74 65 20 2a 2f |an't all|ocate */|
|00000380| 0a 20 20 20 20 20 20 20 | 20 20 20 20 65 72 72 6f |. | erro|
|00000390| 72 28 45 5f 4d 45 4d 2c | 22 73 70 72 6f 77 5f 73 |r(E_MEM,|"sprow_s|
|000003a0| 65 74 5f 76 61 6c 22 29 | 3b 0a 20 20 20 20 20 20 |et_val")|;. |
|000003b0| 20 20 20 72 2d 3e 6d 61 | 78 6c 65 6e 20 3d 20 32 | r->ma|xlen = 2|
|000003c0| 2a 72 2d 3e 6d 61 78 6c | 65 6e 2b 31 3b 0a 20 20 |*r->maxl|en+1;. |
|000003d0| 20 20 20 20 7d 0a 20 20 | 20 20 20 20 66 6f 72 20 | }. | for |
|000003e0| 28 20 69 64 78 32 20 3d | 20 72 2d 3e 6c 65 6e 2d |( idx2 =| r->len-|
|000003f0| 31 3b 20 69 64 78 32 20 | 3e 3d 20 69 64 78 3b 20 |1; idx2 |>= idx; |
|00000400| 69 64 78 32 2d 2d 20 29 | 0a 20 20 20 20 20 20 20 |idx2-- )|. |
|00000410| 20 4d 45 4d 5f 43 4f 50 | 59 28 28 63 68 61 72 20 | MEM_COP|Y((char |
|00000420| 2a 29 28 26 28 72 2d 3e | 65 6c 74 5b 69 64 78 32 |*)(&(r->|elt[idx2|
|00000430| 5d 29 29 2c 0a 20 20 20 | 20 20 20 20 20 20 20 20 |])),. | |
|00000440| 20 20 20 20 20 20 28 63 | 68 61 72 20 2a 29 28 26 | (c|har *)(&|
|00000450| 28 72 2d 3e 65 6c 74 5b | 69 64 78 32 2b 31 5d 29 |(r->elt[|idx2+1])|
|00000460| 29 2c 73 69 7a 65 6f 66 | 28 72 6f 77 5f 65 6c 74 |),sizeof|(row_elt|
|00000470| 29 29 3b 0a 20 20 20 20 | 20 20 2f 2a 2a 2a 2a 2a |));. | /*****|
|00000480| 2a 2a 2a 2a 2a 2a 2a 2a | 2a 2a 2a 2a 2a 2a 2a 2a |********|********|
|00000490| 2a 2a 2a 2a 2a 2a 2a 2a | 2a 2a 2a 2a 2a 2a 2a 2a |********|********|
|000004a0| 2a 2a 2a 2a 2a 2a 2a 2a | 2a 2a 2a 2a 2a 2a 2a 2a |********|********|
|000004b0| 2a 2a 2a 2a 2a 2a 2a 0a | 20 20 20 20 20 20 20 20 |*******.| |
|000004c0| 69 66 20 28 20 69 64 78 | 20 3c 20 72 2d 3e 6c 65 |if ( idx| < r->le|
|000004d0| 6e 20 29 0a 20 20 20 20 | 20 20 20 20 4d 45 4d 5f |n ). | MEM_|
|000004e0| 43 4f 50 59 28 28 63 68 | 61 72 20 2a 29 28 26 28 |COPY((ch|ar *)(&(|
|000004f0| 72 2d 3e 65 6c 74 5b 69 | 64 78 5d 29 29 2c 28 63 |r->elt[i|dx])),(c|
|00000500| 68 61 72 20 2a 29 28 26 | 28 72 2d 3e 65 6c 74 5b |har *)(&|(r->elt[|
|00000510| 69 64 78 2b 31 5d 29 29 | 2c 0a 20 20 20 20 20 20 |idx+1]))|,. |
|00000520| 20 20 28 72 2d 3e 6c 65 | 6e 2d 69 64 78 29 2a 73 | (r->le|n-idx)*s|
|00000530| 69 7a 65 6f 66 28 72 6f | 77 5f 65 6c 74 29 29 3b |izeof(ro|w_elt));|
|00000540| 0a 20 20 20 20 20 20 20 | 20 2a 2a 2a 2a 2a 2a 2a |. | *******|
|00000550| 2a 2a 2a 2a 2a 2a 2a 2a | 2a 2a 2a 2a 2a 2a 2a 2a |********|********|
|00000560| 2a 2a 2a 2a 2a 2a 2a 2a | 2a 2a 2a 2a 2a 2a 2a 2a |********|********|
|00000570| 2a 2a 2a 2a 2a 2a 2a 2a | 2a 2a 2a 2a 2a 2a 2a 2a |********|********|
|00000580| 2a 2a 2a 2a 2a 2f 0a 20 | 20 20 20 20 20 72 2d 3e |*****/. | r->|
|00000590| 6c 65 6e 2b 2b 3b 0a 20 | 20 20 20 20 20 72 2d 3e |len++;. | r->|
|000005a0| 65 6c 74 5b 69 64 78 5d | 2e 63 6f 6c 20 3d 20 6a |elt[idx]|.col = j|
|000005b0| 3b 0a 20 20 20 20 20 20 | 72 2d 3e 65 6c 74 5b 69 |;. |r->elt[i|
|000005c0| 64 78 5d 2e 6e 78 74 5f | 72 6f 77 20 3d 20 2d 31 |dx].nxt_|row = -1|
|000005d0| 3b 0a 20 20 20 20 20 20 | 72 2d 3e 65 6c 74 5b 69 |;. |r->elt[i|
|000005e0| 64 78 5d 2e 6e 78 74 5f | 69 64 78 20 3d 20 2d 31 |dx].nxt_|idx = -1|
|000005f0| 3b 0a 20 20 20 20 20 20 | 72 65 74 75 72 6e 20 72 |;. |return r|
|00000600| 2d 3e 65 6c 74 5b 69 64 | 78 5d 2e 76 61 6c 20 3d |->elt[id|x].val =|
|00000610| 20 76 61 6c 3b 0a 20 20 | 20 7d 0a 20 20 20 2f 2a | val;. | }. /*|
|00000620| 20 65 6c 73 65 20 2d 2d | 20 69 64 78 20 3d 3d 20 | else --| idx == |
|00000630| 2d 31 2c 20 65 72 72 6f | 72 20 69 6e 20 69 6e 64 |-1, erro|r in ind|
|00000640| 65 78 2f 6d 61 74 72 69 | 78 21 20 2a 2f 0a 20 20 |ex/matri|x! */. |
|00000650| 20 72 65 74 75 72 6e 20 | 30 2e 30 3b 0a 7d 0a 0a | return |0.0;.}..|
|00000660| 0a 46 69 6c 65 44 61 74 | 61 82 73 70 73 77 61 70 |.FileDat|a.spswap|
|00000670| 00 00 00 00 00 f0 1c 00 | 00 45 ff ff ff dc d6 40 |........|.E.....@|
|00000680| 17 03 00 5e ad 0a 2f 2a | 2a 2a 2a 2a 2a 2a 2a 2a |...^../*|********|
|00000690| 2a 2a 2a 2a 2a 2a 2a 2a | 2a 2a 2a 2a 2a 2a 2a 2a |********|********|
|000006a0| 2a 2a 2a 2a 2a 2a 2a 2a | 2a 2a 2a 2a 2a 2a 2a 2a |********|********|
|000006b0| 2a 2a 2a 2a 2a 2a 2a 2a | 2a 2a 2a 2a 2a 2a 2a 2a |********|********|
|000006c0| 2a 2a 2a 2a 2a 2a 2a 2a | 2a 2a 2a 2a 2a 2a 2a 2a |********|********|
|000006d0| 2a 0a 2a 2a 0a 2a 2a 20 | 43 6f 70 79 72 69 67 68 |*.**.** |Copyrigh|
|000006e0| 74 20 28 43 29 20 31 39 | 39 33 20 44 61 76 69 64 |t (C) 19|93 David|
|000006f0| 20 45 2e 20 53 74 65 77 | 61 72 64 20 26 20 5a 62 | E. Stew|ard & Zb|
|00000700| 69 67 6e 69 65 77 20 4c | 65 79 6b 2c 20 61 6c 6c |igniew L|eyk, all|
|00000710| 20 72 69 67 68 74 73 20 | 72 65 73 65 72 76 65 64 | rights |reserved|
|00000720| 2e 0a 2a 2a 0a 2a 2a 09 | 09 09 20 20 20 20 20 4d |..**.**.|.. M|
|00000730| 65 73 63 68 61 63 68 20 | 4c 69 62 72 61 72 79 0a |eschach |Library.|
|00000740| 2a 2a 20 0a 2a 2a 20 54 | 68 69 73 20 4d 65 73 63 |** .** T|his Mesc|
|00000750| 68 61 63 68 20 4c 69 62 | 72 61 72 79 20 69 73 20 |hach Lib|rary is |
|00000760| 70 72 6f 76 69 64 65 64 | 20 22 61 73 20 69 73 22 |provided| "as is"|
|00000770| 20 77 69 74 68 6f 75 74 | 20 61 6e 79 20 65 78 70 | without| any exp|
|00000780| 72 65 73 73 20 0a 2a 2a | 20 6f 72 20 69 6d 70 6c |ress .**| or impl|
|00000790| 69 65 64 20 77 61 72 72 | 61 6e 74 79 20 6f 66 20 |ied warr|anty of |
|000007a0| 61 6e 79 20 6b 69 6e 64 | 20 77 69 74 68 20 72 65 |any kind| with re|
|000007b0| 73 70 65 63 74 20 74 6f | 20 74 68 69 73 20 73 6f |spect to| this so|
|000007c0| 66 74 77 61 72 65 2e 20 | 0a 2a 2a 20 49 6e 20 70 |ftware. |.** In p|
|000007d0| 61 72 74 69 63 75 6c 61 | 72 20 74 68 65 20 61 75 |articula|r the au|
|000007e0| 74 68 6f 72 73 20 73 68 | 61 6c 6c 20 6e 6f 74 20 |thors sh|all not |
|000007f0| 62 65 20 6c 69 61 62 6c | 65 20 66 6f 72 20 61 6e |be liabl|e for an|
|00000800| 79 20 64 69 72 65 63 74 | 2c 20 0a 2a 2a 20 69 6e |y direct|, .** in|
|00000810| 64 69 72 65 63 74 2c 20 | 73 70 65 63 69 61 6c 2c |direct, |special,|
|00000820| 20 69 6e 63 69 64 65 6e | 74 61 6c 20 6f 72 20 63 | inciden|tal or c|
|00000830| 6f 6e 73 65 71 75 65 6e | 74 69 61 6c 20 64 61 6d |onsequen|tial dam|
|00000840| 61 67 65 73 20 61 72 69 | 73 69 6e 67 20 0a 2a 2a |ages ari|sing .**|
|00000850| 20 69 6e 20 61 6e 79 20 | 77 61 79 20 66 72 6f 6d | in any |way from|
|00000860| 20 75 73 65 20 6f 66 20 | 74 68 65 20 73 6f 66 74 | use of |the soft|
|00000870| 77 61 72 65 2e 0a 2a 2a | 20 0a 2a 2a 20 45 76 65 |ware..**| .** Eve|
|00000880| 72 79 6f 6e 65 20 69 73 | 20 67 72 61 6e 74 65 64 |ryone is| granted|
|00000890| 20 70 65 72 6d 69 73 73 | 69 6f 6e 20 74 6f 20 63 | permiss|ion to c|
|000008a0| 6f 70 79 2c 20 6d 6f 64 | 69 66 79 20 61 6e 64 20 |opy, mod|ify and |
|000008b0| 72 65 64 69 73 74 72 69 | 62 75 74 65 20 74 68 69 |redistri|bute thi|
|000008c0| 73 0a 2a 2a 20 4d 65 73 | 63 68 61 63 68 20 4c 69 |s.** Mes|chach Li|
|000008d0| 62 72 61 72 79 2c 20 70 | 72 6f 76 69 64 65 64 3a |brary, p|rovided:|
|000008e0| 0a 2a 2a 20 20 31 2e 20 | 20 41 6c 6c 20 63 6f 70 |.** 1. | All cop|
|000008f0| 69 65 73 20 63 6f 6e 74 | 61 69 6e 20 74 68 69 73 |ies cont|ain this|
|00000900| 20 63 6f 70 79 72 69 67 | 68 74 20 6e 6f 74 69 63 | copyrig|ht notic|
|00000910| 65 2e 0a 2a 2a 20 20 32 | 2e 20 20 41 6c 6c 20 6d |e..** 2|. All m|
|00000920| 6f 64 69 66 69 65 64 20 | 63 6f 70 69 65 73 20 73 |odified |copies s|
|00000930| 68 61 6c 6c 20 63 61 72 | 72 79 20 61 20 6e 6f 74 |hall car|ry a not|
|00000940| 69 63 65 20 73 74 61 74 | 69 6e 67 20 77 68 6f 0a |ice stat|ing who.|
|00000950| 2a 2a 20 20 20 20 20 20 | 6d 61 64 65 20 74 68 65 |** |made the|
|00000960| 20 6c 61 73 74 20 6d 6f | 64 69 66 69 63 61 74 69 | last mo|dificati|
|00000970| 6f 6e 20 61 6e 64 20 74 | 68 65 20 64 61 74 65 20 |on and t|he date |
|00000980| 6f 66 20 73 75 63 68 20 | 6d 6f 64 69 66 69 63 61 |of such |modifica|
|00000990| 74 69 6f 6e 2e 0a 2a 2a | 20 20 33 2e 20 20 4e 6f |tion..**| 3. No|
|000009a0| 20 63 68 61 72 67 65 20 | 69 73 20 6d 61 64 65 20 | charge |is made |
|000009b0| 66 6f 72 20 74 68 69 73 | 20 73 6f 66 74 77 61 72 |for this| softwar|
|000009c0| 65 20 6f 72 20 77 6f 72 | 6b 73 20 64 65 72 69 76 |e or wor|ks deriv|
|000009d0| 65 64 20 66 72 6f 6d 20 | 69 74 2e 20 20 0a 2a 2a |ed from |it. .**|
|000009e0| 20 20 20 20 20 20 54 68 | 69 73 20 63 6c 61 75 73 | Th|is claus|
|000009f0| 65 20 73 68 61 6c 6c 20 | 6e 6f 74 20 62 65 20 63 |e shall |not be c|
|00000a00| 6f 6e 73 74 72 75 65 64 | 20 61 73 20 63 6f 6e 73 |onstrued| as cons|
|00000a10| 74 72 61 69 6e 69 6e 67 | 20 6f 74 68 65 72 20 73 |training| other s|
|00000a20| 6f 66 74 77 61 72 65 0a | 2a 2a 20 20 20 20 20 20 |oftware.|** |
|00000a30| 64 69 73 74 72 69 62 75 | 74 65 64 20 6f 6e 20 74 |distribu|ted on t|
|00000a40| 68 65 20 73 61 6d 65 20 | 6d 65 64 69 75 6d 20 61 |he same |medium a|
|00000a50| 73 20 74 68 69 73 20 73 | 6f 66 74 77 61 72 65 2c |s this s|oftware,|
|00000a60| 20 6e 6f 72 20 69 73 20 | 61 0a 2a 2a 20 20 20 20 | nor is |a.** |
|00000a70| 20 20 64 69 73 74 72 69 | 62 75 74 69 6f 6e 20 66 | distri|bution f|
|00000a80| 65 65 20 63 6f 6e 73 69 | 64 65 72 65 64 20 61 20 |ee consi|dered a |
|00000a90| 63 68 61 72 67 65 2e 0a | 2a 2a 0a 2a 2a 2a 2a 2a |charge..|**.*****|
|00000aa0| 2a 2a 2a 2a 2a 2a 2a 2a | 2a 2a 2a 2a 2a 2a 2a 2a |********|********|
|00000ab0| 2a 2a 2a 2a 2a 2a 2a 2a | 2a 2a 2a 2a 2a 2a 2a 2a |********|********|
|00000ac0| 2a 2a 2a 2a 2a 2a 2a 2a | 2a 2a 2a 2a 2a 2a 2a 2a |********|********|
|00000ad0| 2a 2a 2a 2a 2a 2a 2a 2a | 2a 2a 2a 2a 2a 2a 2a 2a |********|********|
|00000ae0| 2a 2a 2a 2a 2a 2a 2f 0a | 0a 0a 2f 2a 0a 09 53 70 |******/.|../*..Sp|
|00000af0| 61 72 73 65 20 6d 61 74 | 72 69 78 20 73 77 61 70 |arse mat|rix swap|
|00000b00| 20 61 6e 64 20 70 65 72 | 6d 75 74 61 74 69 6f 6e | and per|mutation|
|00000b10| 20 72 6f 75 74 69 6e 65 | 73 0a 09 4d 6f 64 69 66 | routine|s..Modif|
|00000b20| 69 65 64 20 4d 6f 6e 20 | 30 39 74 68 20 4e 6f 76 |ied Mon |09th Nov|
|00000b30| 20 31 39 39 32 2c 20 30 | 38 3a 35 30 3a 35 34 20 | 1992, 0|8:50:54 |
|00000b40| 50 4d 0a 09 74 6f 20 75 | 73 65 20 4b 61 72 65 6e |PM..to u|se Karen|
|00000b50| 20 47 65 6f 72 67 65 27 | 73 20 73 75 67 67 65 73 | George'|s sugges|
|00000b60| 74 69 6f 6e 20 74 6f 20 | 75 73 65 20 75 6e 6f 72 |tion to |use unor|
|00000b70| 64 65 72 65 64 20 72 6f | 77 73 0a 2a 2f 0a 0a 73 |dered ro|ws.*/..s|
|00000b80| 74 61 74 69 63 09 63 68 | 61 72 09 72 63 73 69 64 |tatic.ch|ar.rcsid|
|00000b90| 5b 5d 20 3d 20 22 24 49 | 64 3a 20 73 70 73 77 61 |[] = "$I|d: spswa|
|00000ba0| 70 2e 63 2c 76 20 31 2e | 33 20 31 39 39 34 2f 30 |p.c,v 1.|3 1994/0|
|00000bb0| 31 2f 31 33 20 30 35 3a | 34 34 3a 34 33 20 64 65 |1/13 05:|44:43 de|
|00000bc0| 73 20 45 78 70 20 24 22 | 3b 0a 0a 23 69 6e 63 6c |s Exp $"|;..#incl|
|00000bd0| 75 64 65 09 3c 73 74 64 | 69 6f 2e 68 3e 0a 23 69 |ude.<std|io.h>.#i|
|00000be0| 6e 63 6c 75 64 65 09 3c | 6d 61 74 68 2e 68 3e 0a |nclude.<|math.h>.|
|00000bf0| 23 69 6e 63 6c 75 64 65 | 09 22 6d 61 74 72 69 78 |#include|."matrix|
|00000c00| 2e 68 22 0a 23 69 6e 63 | 6c 75 64 65 09 22 73 70 |.h".#inc|lude."sp|
|00000c10| 61 72 73 65 2e 68 22 0a | 23 69 6e 63 6c 75 64 65 |arse.h".|#include|
|00000c20| 20 20 20 20 20 20 20 20 | 22 73 70 61 72 73 65 32 | |"sparse2|
|00000c30| 2e 68 22 0a 0a 0a 23 64 | 65 66 69 6e 65 09 62 74 |.h"...#d|efine.bt|
|00000c40| 6f 73 28 78 29 09 28 28 | 78 29 20 3f 20 22 54 52 |os(x).((|x) ? "TR|
|00000c50| 55 45 22 20 3a 20 22 46 | 41 4c 53 45 22 29 0a 0a |UE" : "F|ALSE")..|
|00000c60| 2f 2a 20 73 63 61 6e 5f | 74 6f 20 2d 2d 20 75 70 |/* scan_|to -- up|
|00000c70| 64 61 74 65 73 20 73 63 | 61 6e 20 28 69 6e 74 29 |dates sc|an (int)|
|00000c80| 20 76 65 63 74 6f 72 73 | 20 74 6f 20 70 6f 69 6e | vectors| to poin|
|00000c90| 74 20 74 6f 20 74 68 65 | 20 6c 61 73 74 20 72 6f |t to the| last ro|
|00000ca0| 77 20 69 6e 20 65 61 63 | 68 0a 09 63 6f 6c 75 6d |w in eac|h..colum|
|00000cb0| 6e 20 77 69 74 68 20 72 | 6f 77 20 23 20 3c 3d 20 |n with r|ow # <= |
|00000cc0| 6d 61 78 5f 72 6f 77 2c | 20 69 66 20 61 6e 79 20 |max_row,| if any |
|00000cd0| 2a 2f 0a 76 6f 69 64 09 | 73 63 61 6e 5f 74 6f 28 |*/.void.|scan_to(|
|00000ce0| 41 2c 20 73 63 61 6e 5f | 72 6f 77 2c 20 73 63 61 |A, scan_|row, sca|
|00000cf0| 6e 5f 69 64 78 2c 20 63 | 6f 6c 5f 6c 69 73 74 2c |n_idx, c|ol_list,|
|00000d00| 20 6d 61 78 5f 72 6f 77 | 29 0a 53 50 4d 41 54 09 | max_row|).SPMAT.|
|00000d10| 2a 41 3b 0a 49 56 45 43 | 09 2a 73 63 61 6e 5f 72 |*A;.IVEC|.*scan_r|
|00000d20| 6f 77 2c 20 2a 73 63 61 | 6e 5f 69 64 78 2c 20 2a |ow, *sca|n_idx, *|
|00000d30| 63 6f 6c 5f 6c 69 73 74 | 3b 0a 69 6e 74 09 6d 61 |col_list|;.int.ma|
|00000d40| 78 5f 72 6f 77 3b 0a 7b | 0a 20 20 20 20 69 6e 74 |x_row;.{|. int|
|00000d50| 09 09 63 6f 6c 2c 20 69 | 64 78 2c 20 6a 5f 69 64 |..col, i|dx, j_id|
|00000d60| 78 2c 20 72 6f 77 5f 6e | 75 6d 3b 0a 20 20 20 20 |x, row_n|um;. |
|00000d70| 53 50 52 4f 57 09 2a 72 | 3b 0a 20 20 20 20 72 6f |SPROW.*r|;. ro|
|00000d80| 77 5f 65 6c 74 09 2a 65 | 3b 0a 0a 20 20 20 20 69 |w_elt.*e|;.. i|
|00000d90| 66 20 28 20 21 20 41 20 | 7c 7c 20 21 20 73 63 61 |f ( ! A ||| ! sca|
|00000da0| 6e 5f 72 6f 77 20 7c 7c | 20 21 20 73 63 61 6e 5f |n_row ||| ! scan_|
|00000db0| 69 64 78 20 7c 7c 20 21 | 20 63 6f 6c 5f 6c 69 73 |idx || !| col_lis|
|00000dc0| 74 20 29 0a 09 65 72 72 | 6f 72 28 45 5f 4e 55 4c |t )..err|or(E_NUL|
|00000dd0| 4c 2c 22 73 63 61 6e 5f | 74 6f 22 29 3b 0a 20 20 |L,"scan_|to");. |
|00000de0| 20 20 69 66 20 28 20 73 | 63 61 6e 5f 72 6f 77 2d | if ( s|can_row-|
|00000df0| 3e 64 69 6d 20 21 3d 20 | 73 63 61 6e 5f 69 64 78 |>dim != |scan_idx|
|00000e00| 2d 3e 64 69 6d 20 7c 7c | 20 73 63 61 6e 5f 69 64 |->dim ||| scan_id|
|00000e10| 78 2d 3e 64 69 6d 20 21 | 3d 20 63 6f 6c 5f 6c 69 |x->dim !|= col_li|
|00000e20| 73 74 2d 3e 64 69 6d 20 | 29 0a 09 65 72 72 6f 72 |st->dim |)..error|
|00000e30| 28 45 5f 53 49 5a 45 53 | 2c 22 73 63 61 6e 5f 74 |(E_SIZES|,"scan_t|
|00000e40| 6f 22 29 3b 0a 0a 20 20 | 20 20 69 66 20 28 20 6d |o");.. | if ( m|
|00000e50| 61 78 5f 72 6f 77 20 3c | 20 30 20 29 0a 09 72 65 |ax_row <| 0 )..re|
|00000e60| 74 75 72 6e 3b 0a 0a 20 | 20 20 20 69 66 20 28 20 |turn;.. | if ( |
|00000e70| 21 20 41 2d 3e 66 6c 61 | 67 5f 63 6f 6c 20 29 0a |! A->fla|g_col ).|
|00000e80| 09 73 70 5f 63 6f 6c 5f | 61 63 63 65 73 73 28 41 |.sp_col_|access(A|
|00000e90| 29 3b 0a 0a 20 20 20 20 | 66 6f 72 20 28 20 6a 5f |);.. |for ( j_|
|00000ea0| 69 64 78 20 3d 20 30 3b | 20 6a 5f 69 64 78 20 3c |idx = 0;| j_idx <|
|00000eb0| 20 73 63 61 6e 5f 72 6f | 77 2d 3e 64 69 6d 3b 20 | scan_ro|w->dim; |
|00000ec0| 6a 5f 69 64 78 2b 2b 20 | 29 0a 20 20 20 20 7b 0a |j_idx++ |). {.|
|00000ed0| 09 72 6f 77 5f 6e 75 6d | 20 3d 20 73 63 61 6e 5f |.row_num| = scan_|
|00000ee0| 72 6f 77 2d 3e 69 76 65 | 5b 6a 5f 69 64 78 5d 3b |row->ive|[j_idx];|
|00000ef0| 0a 09 69 64 78 20 3d 20 | 73 63 61 6e 5f 69 64 78 |..idx = |scan_idx|
|00000f00| 2d 3e 69 76 65 5b 6a 5f | 69 64 78 5d 3b 0a 09 63 |->ive[j_|idx];..c|
|00000f10| 6f 6c 20 3d 20 63 6f 6c | 5f 6c 69 73 74 2d 3e 69 |ol = col|_list->i|
|00000f20| 76 65 5b 6a 5f 69 64 78 | 5d 3b 0a 0a 09 69 66 20 |ve[j_idx|];...if |
|00000f30| 28 20 63 6f 6c 20 3c 20 | 30 20 7c 7c 20 63 6f 6c |( col < |0 || col|
|00000f40| 20 3e 3d 20 41 2d 3e 6e | 20 29 0a 09 20 20 20 20 | >= A->n| ).. |
|00000f50| 65 72 72 6f 72 28 45 5f | 42 4f 55 4e 44 53 2c 22 |error(E_|BOUNDS,"|
|00000f60| 73 63 61 6e 5f 74 6f 22 | 29 3b 0a 09 69 66 20 28 |scan_to"|);..if (|
|00000f70| 20 72 6f 77 5f 6e 75 6d | 20 3c 20 30 20 29 0a 09 | row_num| < 0 )..|
|00000f80| 7b 0a 09 20 20 20 20 69 | 64 78 20 3d 20 63 6f 6c |{.. i|dx = col|
|00000f90| 3b 0a 09 20 20 20 20 63 | 6f 6e 74 69 6e 75 65 3b |;.. c|ontinue;|
|00000fa0| 0a 09 7d 0a 09 72 20 3d | 20 26 28 41 2d 3e 72 6f |..}..r =| &(A->ro|
|00000fb0| 77 5b 72 6f 77 5f 6e 75 | 6d 5d 29 3b 0a 09 69 66 |w[row_nu|m]);..if|
|00000fc0| 20 28 20 69 64 78 20 3c | 20 30 20 29 0a 09 20 20 | ( idx <| 0 ).. |
|00000fd0| 20 20 65 72 72 6f 72 28 | 45 5f 49 4e 54 45 52 4e | error(|E_INTERN|
|00000fe0| 2c 22 73 63 61 6e 5f 74 | 6f 22 29 3b 0a 09 65 20 |,"scan_t|o");..e |
|00000ff0| 3d 20 26 28 72 2d 3e 65 | 6c 74 5b 69 64 78 5d 29 |= &(r->e|lt[idx])|
|00001000| 3b 0a 09 69 66 20 28 20 | 65 2d 3e 63 6f 6c 20 21 |;..if ( |e->col !|
|00001010| 3d 20 63 6f 6c 20 29 0a | 09 20 20 20 20 65 72 72 |= col ).|. err|
|00001020| 6f 72 28 45 5f 49 4e 54 | 45 52 4e 2c 22 73 63 61 |or(E_INT|ERN,"sca|
|00001030| 6e 5f 74 6f 22 29 3b 0a | 09 69 66 20 28 20 69 64 |n_to");.|.if ( id|
|00001040| 78 20 3c 20 30 20 29 0a | 09 7b 0a 09 20 20 20 20 |x < 0 ).|.{.. |
|00001050| 70 72 69 6e 74 66 28 22 | 73 63 61 6e 5f 74 6f 3a |printf("|scan_to:|
|00001060| 20 72 6f 77 5f 6e 75 6d | 20 3d 20 25 64 2c 20 69 | row_num| = %d, i|
|00001070| 64 78 20 3d 20 25 64 2c | 20 63 6f 6c 20 3d 20 25 |dx = %d,| col = %|
|00001080| 64 5c 6e 22 2c 0a 09 09 | 20 20 20 72 6f 77 5f 6e |d\n",...| row_n|
|00001090| 75 6d 2c 20 69 64 78 2c | 20 63 6f 6c 29 3b 0a 09 |um, idx,| col);..|
|000010a0| 20 20 20 20 65 72 72 6f | 72 28 45 5f 49 4e 54 45 | erro|r(E_INTE|
|000010b0| 52 4e 2c 22 73 63 61 6e | 5f 74 6f 22 29 3b 0a 09 |RN,"scan|_to");..|
|000010c0| 7d 0a 09 2f 2a 20 69 66 | 20 28 20 65 2d 3e 6e 78 |}../* if| ( e->nx|
|000010d0| 74 5f 72 6f 77 20 3c 3d | 20 6d 61 78 5f 72 6f 77 |t_row <=| max_row|
|000010e0| 20 29 0a 09 20 20 20 20 | 63 68 61 73 65 5f 63 6f | ).. |chase_co|
|000010f0| 6c 28 41 2c 20 63 6f 6c | 2c 20 26 72 6f 77 5f 6e |l(A, col|, &row_n|
|00001100| 75 6d 2c 20 26 69 64 78 | 2c 20 6d 61 78 5f 72 6f |um, &idx|, max_ro|
|00001110| 77 29 3b 20 2a 2f 0a 09 | 77 68 69 6c 65 20 28 20 |w); */..|while ( |
|00001120| 65 2d 3e 6e 78 74 5f 72 | 6f 77 20 3e 3d 20 30 20 |e->nxt_r|ow >= 0 |
|00001130| 26 26 20 65 2d 3e 6e 78 | 74 5f 72 6f 77 20 3c 3d |&& e->nx|t_row <=|
|00001140| 20 6d 61 78 5f 72 6f 77 | 20 29 0a 09 7b 0a 09 20 | max_row| )..{.. |
|00001150| 20 20 20 72 6f 77 5f 6e | 75 6d 20 3d 20 65 2d 3e | row_n|um = e->|
|00001160| 6e 78 74 5f 72 6f 77 3b | 0a 09 20 20 20 20 69 64 |nxt_row;|.. id|
|00001170| 78 20 3d 20 65 2d 3e 6e | 78 74 5f 69 64 78 3b 0a |x = e->n|xt_idx;.|
|00001180| 09 20 20 20 20 65 20 3d | 20 26 28 41 2d 3e 72 6f |. e =| &(A->ro|
|00001190| 77 5b 72 6f 77 5f 6e 75 | 6d 5d 2e 65 6c 74 5b 69 |w[row_nu|m].elt[i|
|000011a0| 64 78 5d 29 3b 0a 09 7d | 0a 09 20 20 20 20 0a 09 |dx]);..}|.. ..|
|000011b0| 2f 2a 20 70 72 69 6e 74 | 66 28 22 73 63 61 6e 5f |/* print|f("scan_|
|000011c0| 74 6f 3a 20 63 6f 6d 70 | 75 74 65 64 20 6a 5f 69 |to: comp|uted j_i|
|000011d0| 64 78 20 3d 20 25 64 2c | 20 72 6f 77 5f 6e 75 6d |dx = %d,| row_num|
|000011e0| 20 3d 20 25 64 2c 20 69 | 64 78 20 3d 20 25 64 5c | = %d, i|dx = %d\|
|000011f0| 6e 22 2c 0a 09 20 20 20 | 20 20 20 20 6a 5f 69 64 |n",.. | j_id|
|00001200| 78 2c 20 72 6f 77 5f 6e | 75 6d 2c 20 69 64 78 29 |x, row_n|um, idx)|
|00001210| 3b 20 2a 2f 0a 09 73 63 | 61 6e 5f 72 6f 77 2d 3e |; */..sc|an_row->|
|00001220| 69 76 65 5b 6a 5f 69 64 | 78 5d 20 3d 20 72 6f 77 |ive[j_id|x] = row|
|00001230| 5f 6e 75 6d 3b 0a 09 73 | 63 61 6e 5f 69 64 78 2d |_num;..s|can_idx-|
|00001240| 3e 69 76 65 5b 6a 5f 69 | 64 78 5d 20 3d 20 69 64 |>ive[j_i|dx] = id|
|00001250| 78 3b 0a 20 20 20 20 7d | 0a 7d 0a 0a 2f 2a 20 70 |x;. }|.}../* p|
|00001260| 61 74 63 68 5f 63 6f 6c | 20 2d 2d 20 70 61 74 63 |atch_col| -- patc|
|00001270| 68 65 73 20 63 6f 6c 75 | 6d 6e 20 61 63 63 65 73 |hes colu|mn acces|
|00001280| 73 20 70 61 74 68 73 20 | 66 6f 72 20 66 69 6c 6c |s paths |for fill|
|00001290| 2d 69 6e 20 2a 2f 0a 76 | 6f 69 64 20 70 61 74 63 |-in */.v|oid patc|
|000012a0| 68 5f 63 6f 6c 28 41 2c | 20 63 6f 6c 2c 20 6f 6c |h_col(A,| col, ol|
|000012b0| 64 5f 72 6f 77 2c 20 6f | 6c 64 5f 69 64 78 2c 20 |d_row, o|ld_idx, |
|000012c0| 72 6f 77 5f 6e 75 6d 2c | 20 69 64 78 29 0a 53 50 |row_num,| idx).SP|
|000012d0| 4d 41 54 09 2a 41 3b 0a | 69 6e 74 09 63 6f 6c 2c |MAT.*A;.|int.col,|
|000012e0| 20 6f 6c 64 5f 72 6f 77 | 2c 20 6f 6c 64 5f 69 64 | old_row|, old_id|
|000012f0| 78 2c 20 72 6f 77 5f 6e | 75 6d 2c 20 69 64 78 3b |x, row_n|um, idx;|
|00001300| 0a 7b 0a 20 20 20 20 53 | 50 52 4f 57 09 2a 72 3b |.{. S|PROW.*r;|
|00001310| 0a 20 20 20 20 72 6f 77 | 5f 65 6c 74 09 2a 65 3b |. row|_elt.*e;|
|00001320| 0a 20 20 20 20 0a 20 20 | 20 20 69 66 20 28 20 6f |. . | if ( o|
|00001330| 6c 64 5f 72 6f 77 20 3e | 3d 20 30 20 29 0a 20 20 |ld_row >|= 0 ). |
|00001340| 20 20 7b 0a 09 72 20 3d | 20 26 28 41 2d 3e 72 6f | {..r =| &(A->ro|
|00001350| 77 5b 6f 6c 64 5f 72 6f | 77 5d 29 3b 0a 09 6f 6c |w[old_ro|w]);..ol|
|00001360| 64 5f 69 64 78 20 3d 20 | 73 70 72 6f 77 5f 69 64 |d_idx = |sprow_id|
|00001370| 78 32 28 72 2c 63 6f 6c | 2c 6f 6c 64 5f 69 64 78 |x2(r,col|,old_idx|
|00001380| 29 3b 0a 09 65 20 3d 20 | 26 28 72 2d 3e 65 6c 74 |);..e = |&(r->elt|
|00001390| 5b 6f 6c 64 5f 69 64 78 | 5d 29 3b 0a 09 65 2d 3e |[old_idx|]);..e->|
|000013a0| 6e 78 74 5f 72 6f 77 20 | 3d 20 72 6f 77 5f 6e 75 |nxt_row |= row_nu|
|000013b0| 6d 3b 0a 09 65 2d 3e 6e | 78 74 5f 69 64 78 20 3d |m;..e->n|xt_idx =|
|000013c0| 20 69 64 78 3b 0a 20 20 | 20 20 7d 0a 20 20 20 20 | idx;. | }. |
|000013d0| 65 6c 73 65 0a 20 20 20 | 20 7b 0a 09 41 2d 3e 73 |else. | {..A->s|
|000013e0| 74 61 72 74 5f 72 6f 77 | 5b 63 6f 6c 5d 20 3d 20 |tart_row|[col] = |
|000013f0| 72 6f 77 5f 6e 75 6d 3b | 0a 09 41 2d 3e 73 74 61 |row_num;|..A->sta|
|00001400| 72 74 5f 69 64 78 5b 63 | 6f 6c 5d 20 3d 20 69 64 |rt_idx[c|ol] = id|
|00001410| 78 3b 0a 20 20 20 20 7d | 0a 7d 0a 0a 2f 2a 20 63 |x;. }|.}../* c|
|00001420| 68 61 73 65 5f 63 6f 6c | 20 2d 2d 20 63 68 61 73 |hase_col| -- chas|
|00001430| 65 73 20 63 6f 6c 75 6d | 6e 20 61 63 63 65 73 73 |es colum|n access|
|00001440| 20 70 61 74 68 20 69 6e | 20 63 6f 6c 75 6d 6e 20 | path in| column |
|00001450| 63 6f 6c 2c 20 73 74 61 | 72 74 69 6e 67 20 77 69 |col, sta|rting wi|
|00001460| 74 68 0a 20 20 20 72 6f | 77 5f 6e 75 6d 20 61 6e |th. ro|w_num an|
|00001470| 64 20 69 64 78 2c 20 74 | 6f 20 66 69 6e 64 20 6c |d idx, t|o find l|
|00001480| 61 73 74 20 72 6f 77 20 | 23 20 69 6e 20 74 68 69 |ast row |# in thi|
|00001490| 73 20 63 6f 6c 75 6d 6e | 20 3c 3d 20 6d 61 78 5f |s column| <= max_|
|000014a0| 72 6f 77 0a 20 20 20 2d | 2d 20 72 6f 77 5f 6e 75 |row. -|- row_nu|
|000014b0| 6d 20 69 73 20 72 65 74 | 75 72 6e 65 64 3b 20 69 |m is ret|urned; i|
|000014c0| 64 78 20 69 73 20 61 6c | 73 6f 20 73 65 74 20 62 |dx is al|so set b|
|000014d0| 79 20 74 68 69 73 20 72 | 6f 75 74 69 6e 65 0a 20 |y this r|outine. |
|000014e0| 20 20 2d 2d 20 61 73 73 | 75 6d 65 73 20 74 68 61 | -- ass|umes tha|
|000014f0| 74 20 74 68 65 20 63 6f | 6c 75 6d 6e 20 61 63 63 |t the co|lumn acc|
|00001500| 65 73 73 20 70 61 74 68 | 73 20 28 70 6f 73 73 69 |ess path|s (possi|
|00001510| 62 6c 79 20 77 69 74 68 | 6f 75 74 20 74 68 65 0a |bly with|out the.|
|00001520| 20 20 20 6e 78 74 5f 69 | 64 78 20 66 69 65 6c 64 | nxt_i|dx field|
|00001530| 73 29 20 61 72 65 20 73 | 65 74 20 75 70 20 2a 2f |s) are s|et up */|
|00001540| 0a 72 6f 77 5f 65 6c 74 | 20 2a 63 68 61 73 65 5f |.row_elt| *chase_|
|00001550| 63 6f 6c 28 41 2c 20 63 | 6f 6c 2c 20 72 6f 77 5f |col(A, c|ol, row_|
|00001560| 6e 75 6d 2c 20 69 64 78 | 2c 20 6d 61 78 5f 72 6f |num, idx|, max_ro|
|00001570| 77 29 0a 53 50 4d 41 54 | 09 2a 41 3b 0a 69 6e 74 |w).SPMAT|.*A;.int|
|00001580| 09 63 6f 6c 2c 20 2a 72 | 6f 77 5f 6e 75 6d 2c 20 |.col, *r|ow_num, |
|00001590| 2a 69 64 78 2c 20 6d 61 | 78 5f 72 6f 77 3b 0a 7b |*idx, ma|x_row;.{|
|000015a0| 0a 20 20 20 20 69 6e 74 | 09 09 6f 6c 64 5f 69 64 |. int|..old_id|
|000015b0| 78 2c 20 6f 6c 64 5f 72 | 6f 77 2c 20 74 6d 70 5f |x, old_r|ow, tmp_|
|000015c0| 69 64 78 2c 20 74 6d 70 | 5f 72 6f 77 3b 0a 20 20 |idx, tmp|_row;. |
|000015d0| 20 20 53 50 52 4f 57 09 | 2a 72 3b 0a 20 20 20 20 | SPROW.|*r;. |
|000015e0| 72 6f 77 5f 65 6c 74 09 | 2a 65 3b 0a 20 20 20 20 |row_elt.|*e;. |
|000015f0| 0a 20 20 20 20 69 66 20 | 28 20 63 6f 6c 20 3c 20 |. if |( col < |
|00001600| 30 20 7c 7c 20 63 6f 6c | 20 3e 3d 20 41 2d 3e 6e |0 || col| >= A->n|
|00001610| 20 29 0a 09 65 72 72 6f | 72 28 45 5f 42 4f 55 4e | )..erro|r(E_BOUN|
|00001620| 44 53 2c 22 63 68 61 73 | 65 5f 63 6f 6c 22 29 3b |DS,"chas|e_col");|
|00001630| 0a 20 20 20 20 74 6d 70 | 5f 72 6f 77 20 3d 20 2a |. tmp|_row = *|
|00001640| 72 6f 77 5f 6e 75 6d 3b | 0a 20 20 20 20 69 66 20 |row_num;|. if |
|00001650| 28 20 74 6d 70 5f 72 6f | 77 20 3c 20 30 20 29 0a |( tmp_ro|w < 0 ).|
|00001660| 20 20 20 20 7b 0a 09 69 | 66 20 28 20 41 2d 3e 73 | {..i|f ( A->s|
|00001670| 74 61 72 74 5f 72 6f 77 | 5b 63 6f 6c 5d 20 3e 20 |tart_row|[col] > |
|00001680| 6d 61 78 5f 72 6f 77 20 | 29 0a 09 7b 0a 09 20 20 |max_row |)..{.. |
|00001690| 20 20 74 6d 70 5f 72 6f | 77 20 3d 20 2d 31 3b 0a | tmp_ro|w = -1;.|
|000016a0| 09 20 20 20 20 74 6d 70 | 5f 69 64 78 20 3d 20 63 |. tmp|_idx = c|
|000016b0| 6f 6c 3b 0a 09 20 20 20 | 20 72 65 74 75 72 6e 20 |ol;.. | return |
|000016c0| 28 72 6f 77 5f 65 6c 74 | 20 2a 29 4e 55 4c 4c 3b |(row_elt| *)NULL;|
|000016d0| 0a 09 7d 0a 09 65 6c 73 | 65 0a 09 7b 0a 09 20 20 |..}..els|e..{.. |
|000016e0| 20 20 74 6d 70 5f 72 6f | 77 20 3d 20 41 2d 3e 73 | tmp_ro|w = A->s|
|000016f0| 74 61 72 74 5f 72 6f 77 | 5b 63 6f 6c 5d 3b 0a 09 |tart_row|[col];..|
|00001700| 20 20 20 20 74 6d 70 5f | 69 64 78 20 3d 20 41 2d | tmp_|idx = A-|
|00001710| 3e 73 74 61 72 74 5f 69 | 64 78 5b 63 6f 6c 5d 3b |>start_i|dx[col];|
|00001720| 0a 09 7d 0a 20 20 20 20 | 7d 0a 20 20 20 20 65 6c |..}. |}. el|
|00001730| 73 65 0a 09 74 6d 70 5f | 69 64 78 20 3d 20 2a 69 |se..tmp_|idx = *i|
|00001740| 64 78 3b 0a 20 20 20 20 | 0a 20 20 20 20 6f 6c 64 |dx;. |. old|
|00001750| 5f 72 6f 77 20 3d 20 74 | 6d 70 5f 72 6f 77 3b 0a |_row = t|mp_row;.|
|00001760| 20 20 20 20 6f 6c 64 5f | 69 64 78 20 3d 20 74 6d | old_|idx = tm|
|00001770| 70 5f 69 64 78 3b 0a 20 | 20 20 20 77 68 69 6c 65 |p_idx;. | while|
|00001780| 20 28 20 74 6d 70 5f 72 | 6f 77 20 3e 3d 20 30 20 | ( tmp_r|ow >= 0 |
|00001790| 26 26 20 74 6d 70 5f 72 | 6f 77 20 3c 20 6d 61 78 |&& tmp_r|ow < max|
|000017a0| 5f 72 6f 77 20 29 0a 20 | 20 20 20 7b 0a 09 72 20 |_row ). | {..r |
|000017b0| 3d 20 26 28 41 2d 3e 72 | 6f 77 5b 74 6d 70 5f 72 |= &(A->r|ow[tmp_r|
|000017c0| 6f 77 5d 29 3b 0a 09 2f | 2a 20 74 6d 70 5f 69 64 |ow]);../|* tmp_id|
|000017d0| 78 20 3d 20 73 70 72 6f | 77 5f 69 64 78 32 28 72 |x = spro|w_idx2(r|
|000017e0| 2c 63 6f 6c 2c 74 6d 70 | 5f 69 64 78 29 3b 20 2a |,col,tmp|_idx); *|
|000017f0| 2f 0a 09 69 66 20 28 20 | 74 6d 70 5f 69 64 78 20 |/..if ( |tmp_idx |
|00001800| 3c 20 30 20 7c 7c 20 74 | 6d 70 5f 69 64 78 20 3e |< 0 || t|mp_idx >|
|00001810| 3d 20 72 2d 3e 6c 65 6e | 20 7c 7c 0a 09 20 20 20 |= r->len| ||.. |
|00001820| 20 20 72 2d 3e 65 6c 74 | 5b 74 6d 70 5f 69 64 78 | r->elt|[tmp_idx|
|00001830| 5d 2e 63 6f 6c 20 21 3d | 20 63 6f 6c 20 29 0a 09 |].col !=| col )..|
|00001840| 7b 0a 23 69 66 64 65 66 | 20 44 45 42 55 47 0a 09 |{.#ifdef| DEBUG..|
|00001850| 20 20 20 20 70 72 69 6e | 74 66 28 22 63 68 61 73 | prin|tf("chas|
|00001860| 65 5f 63 6f 6c 3a 65 72 | 72 6f 72 3a 20 63 6f 6c |e_col:er|ror: col|
|00001870| 20 3d 20 25 64 2c 20 72 | 6f 77 20 23 20 3d 20 25 | = %d, r|ow # = %|
|00001880| 64 2c 20 69 64 78 20 3d | 20 25 64 5c 6e 22 2c 0a |d, idx =| %d\n",.|
|00001890| 09 09 20 20 20 63 6f 6c | 2c 20 74 6d 70 5f 72 6f |.. col|, tmp_ro|
|000018a0| 77 2c 20 74 6d 70 5f 69 | 64 78 29 3b 0a 09 20 20 |w, tmp_i|dx);.. |
|000018b0| 20 20 70 72 69 6e 74 66 | 28 22 63 68 61 73 65 5f | printf|("chase_|
|000018c0| 63 6f 6c 3a 65 72 72 6f | 72 3a 20 6f 6c 64 5f 72 |col:erro|r: old_r|
|000018d0| 6f 77 20 3d 20 25 64 2c | 20 6f 6c 64 5f 69 64 78 |ow = %d,| old_idx|
|000018e0| 20 3d 20 25 64 5c 6e 22 | 2c 0a 09 09 20 20 20 6f | = %d\n"|,... o|
|000018f0| 6c 64 5f 72 6f 77 2c 20 | 6f 6c 64 5f 69 64 78 29 |ld_row, |old_idx)|
|00001900| 3b 0a 09 20 20 20 20 70 | 72 69 6e 74 66 28 22 63 |;.. p|rintf("c|
|00001910| 68 61 73 65 5f 63 6f 6c | 3a 65 72 72 6f 72 3a 20 |hase_col|:error: |
|00001920| 41 20 3d 5c 6e 22 29 3b | 0a 09 20 20 20 20 73 70 |A =\n");|.. sp|
|00001930| 5f 64 75 6d 70 28 73 74 | 64 6f 75 74 2c 41 29 3b |_dump(st|dout,A);|
|00001940| 0a 23 65 6e 64 69 66 0a | 09 20 20 20 20 65 72 72 |.#endif.|. err|
|00001950| 6f 72 28 45 5f 49 4e 54 | 45 52 4e 2c 22 63 68 61 |or(E_INT|ERN,"cha|
|00001960| 73 65 5f 63 6f 6c 22 29 | 3b 0a 09 7d 0a 09 65 20 |se_col")|;..}..e |
|00001970| 3d 20 26 28 72 2d 3e 65 | 6c 74 5b 74 6d 70 5f 69 |= &(r->e|lt[tmp_i|
|00001980| 64 78 5d 29 3b 0a 09 6f | 6c 64 5f 72 6f 77 20 3d |dx]);..o|ld_row =|
|00001990| 20 74 6d 70 5f 72 6f 77 | 3b 0a 09 6f 6c 64 5f 69 | tmp_row|;..old_i|
|000019a0| 64 78 20 3d 20 74 6d 70 | 5f 69 64 78 3b 0a 09 74 |dx = tmp|_idx;..t|
|000019b0| 6d 70 5f 72 6f 77 20 3d | 20 65 2d 3e 6e 78 74 5f |mp_row =| e->nxt_|
|000019c0| 72 6f 77 3b 0a 09 74 6d | 70 5f 69 64 78 20 3d 20 |row;..tm|p_idx = |
|000019d0| 65 2d 3e 6e 78 74 5f 69 | 64 78 3b 0a 20 20 20 20 |e->nxt_i|dx;. |
|000019e0| 7d 0a 20 20 20 20 69 66 | 20 28 20 6f 6c 64 5f 72 |}. if| ( old_r|
|000019f0| 6f 77 20 3e 20 6d 61 78 | 5f 72 6f 77 20 29 0a 20 |ow > max|_row ). |
|00001a00| 20 20 20 7b 0a 09 6f 6c | 64 5f 72 6f 77 20 3d 20 | {..ol|d_row = |
|00001a10| 2d 31 3b 0a 09 6f 6c 64 | 5f 69 64 78 20 3d 20 63 |-1;..old|_idx = c|
|00001a20| 6f 6c 3b 0a 09 65 20 3d | 20 28 72 6f 77 5f 65 6c |ol;..e =| (row_el|
|00001a30| 74 20 2a 29 4e 55 4c 4c | 3b 0a 20 20 20 20 7d 0a |t *)NULL|;. }.|
|00001a40| 20 20 20 20 65 6c 73 65 | 20 69 66 20 28 20 74 6d | else| if ( tm|
|00001a50| 70 5f 72 6f 77 20 3c 3d | 20 6d 61 78 5f 72 6f 77 |p_row <=| max_row|
|00001a60| 20 26 26 20 74 6d 70 5f | 72 6f 77 20 3e 3d 20 30 | && tmp_|row >= 0|
|00001a70| 20 29 0a 20 20 20 20 7b | 0a 09 6f 6c 64 5f 72 6f | ). {|..old_ro|
|00001a80| 77 20 3d 20 74 6d 70 5f | 72 6f 77 3b 0a 09 6f 6c |w = tmp_|row;..ol|
|00001a90| 64 5f 69 64 78 20 3d 20 | 74 6d 70 5f 69 64 78 3b |d_idx = |tmp_idx;|
|00001aa0| 0a 20 20 20 20 7d 0a 0a | 20 20 20 20 2a 72 6f 77 |. }..| *row|
|00001ab0| 5f 6e 75 6d 20 3d 20 6f | 6c 64 5f 72 6f 77 3b 0a |_num = o|ld_row;.|
|00001ac0| 20 20 20 20 69 66 20 28 | 20 6f 6c 64 5f 72 6f 77 | if (| old_row|
|00001ad0| 20 3e 3d 20 30 20 29 0a | 09 2a 69 64 78 20 3d 20 | >= 0 ).|.*idx = |
|00001ae0| 6f 6c 64 5f 69 64 78 3b | 0a 20 20 20 20 65 6c 73 |old_idx;|. els|
|00001af0| 65 0a 09 2a 69 64 78 20 | 3d 20 63 6f 6c 3b 0a 0a |e..*idx |= col;..|
|00001b00| 20 20 20 20 72 65 74 75 | 72 6e 20 65 3b 0a 7d 0a | retu|rn e;.}.|
|00001b10| 0a 2f 2a 20 63 68 61 73 | 65 5f 70 61 73 74 20 2d |./* chas|e_past -|
|00001b20| 2d 20 61 73 20 66 6f 72 | 20 63 68 61 73 65 5f 63 |- as for| chase_c|
|00001b30| 6f 6c 20 65 78 63 65 70 | 74 20 74 68 61 74 20 77 |ol excep|t that w|
|00001b40| 65 20 77 61 6e 74 20 74 | 68 65 20 66 69 72 73 74 |e want t|he first|
|00001b50| 0a 09 72 6f 77 20 77 68 | 6f 73 65 20 72 6f 77 20 |..row wh|ose row |
|00001b60| 23 20 3e 3d 20 6d 69 6e | 5f 72 6f 77 3b 20 2d 31 |# >= min|_row; -1|
|00001b70| 20 69 6e 64 69 63 61 74 | 65 73 20 6e 6f 20 73 75 | indicat|es no su|
|00001b80| 63 68 20 72 6f 77 20 2a | 2f 0a 72 6f 77 5f 65 6c |ch row *|/.row_el|
|00001b90| 74 20 2a 63 68 61 73 65 | 5f 70 61 73 74 28 41 2c |t *chase|_past(A,|
|00001ba0| 20 63 6f 6c 2c 20 72 6f | 77 5f 6e 75 6d 2c 20 69 | col, ro|w_num, i|
|00001bb0| 64 78 2c 20 6d 69 6e 5f | 72 6f 77 29 0a 53 50 4d |dx, min_|row).SPM|
|00001bc0| 41 54 09 2a 41 3b 0a 69 | 6e 74 09 63 6f 6c 2c 20 |AT.*A;.i|nt.col, |
|00001bd0| 2a 72 6f 77 5f 6e 75 6d | 2c 20 2a 69 64 78 2c 20 |*row_num|, *idx, |
|00001be0| 6d 69 6e 5f 72 6f 77 3b | 0a 7b 0a 20 20 20 20 53 |min_row;|.{. S|
|00001bf0| 50 52 4f 57 09 2a 72 3b | 0a 20 20 20 20 72 6f 77 |PROW.*r;|. row|
|00001c00| 5f 65 6c 74 09 2a 65 3b | 0a 20 20 20 20 69 6e 74 |_elt.*e;|. int|
|00001c10| 09 09 74 6d 70 5f 69 64 | 78 2c 20 74 6d 70 5f 72 |..tmp_id|x, tmp_r|
|00001c20| 6f 77 3b 0a 0a 20 20 20 | 20 74 6d 70 5f 72 6f 77 |ow;.. | tmp_row|
|00001c30| 20 3d 20 2a 72 6f 77 5f | 6e 75 6d 3b 0a 20 20 20 | = *row_|num;. |
|00001c40| 20 74 6d 70 5f 69 64 78 | 20 3d 20 2a 69 64 78 3b | tmp_idx| = *idx;|
|00001c50| 0a 20 20 20 20 63 68 61 | 73 65 5f 63 6f 6c 28 41 |. cha|se_col(A|
|00001c60| 2c 63 6f 6c 2c 26 74 6d | 70 5f 72 6f 77 2c 26 74 |,col,&tm|p_row,&t|
|00001c70| 6d 70 5f 69 64 78 2c 6d | 69 6e 5f 72 6f 77 29 3b |mp_idx,m|in_row);|
|00001c80| 0a 20 20 20 20 69 66 20 | 28 20 74 6d 70 5f 72 6f |. if |( tmp_ro|
|00001c90| 77 20 3c 20 30 20 29 09 | 2f 2a 20 75 73 65 20 41 |w < 0 ).|/* use A|
|00001ca0| 2d 3e 73 74 61 72 74 5f | 72 6f 77 5b 2e 2e 5d 20 |->start_|row[..] |
|00001cb0| 65 74 63 2e 20 2a 2f 0a | 20 20 20 20 7b 0a 09 69 |etc. */.| {..i|
|00001cc0| 66 20 28 20 41 2d 3e 73 | 74 61 72 74 5f 72 6f 77 |f ( A->s|tart_row|
|00001cd0| 5b 63 6f 6c 5d 20 3c 20 | 30 20 29 0a 09 20 20 20 |[col] < |0 ).. |
|00001ce0| 20 74 6d 70 5f 72 6f 77 | 20 3d 20 2d 31 3b 0a 09 | tmp_row| = -1;..|
|00001cf0| 65 6c 73 65 0a 09 7b 0a | 09 20 20 20 20 74 6d 70 |else..{.|. tmp|
|00001d00| 5f 72 6f 77 20 3d 20 41 | 2d 3e 73 74 61 72 74 5f |_row = A|->start_|
|00001d10| 72 6f 77 5b 63 6f 6c 5d | 3b 0a 09 20 20 20 20 74 |row[col]|;.. t|
|00001d20| 6d 70 5f 69 64 78 20 3d | 20 41 2d 3e 73 74 61 72 |mp_idx =| A->star|
|00001d30| 74 5f 69 64 78 5b 63 6f | 6c 5d 3b 0a 09 7d 0a 20 |t_idx[co|l];..}. |
|00001d40| 20 20 20 7d 0a 20 20 20 | 20 65 6c 73 65 20 69 66 | }. | else if|
|00001d50| 20 28 20 74 6d 70 5f 72 | 6f 77 20 3c 20 6d 69 6e | ( tmp_r|ow < min|
|00001d60| 5f 72 6f 77 20 29 0a 20 | 20 20 20 7b 0a 09 72 20 |_row ). | {..r |
|00001d70| 3d 20 26 28 41 2d 3e 72 | 6f 77 5b 74 6d 70 5f 72 |= &(A->r|ow[tmp_r|
|00001d80| 6f 77 5d 29 3b 0a 09 69 | 66 20 28 20 74 6d 70 5f |ow]);..i|f ( tmp_|
|00001d90| 69 64 78 20 3c 20 30 20 | 7c 7c 20 74 6d 70 5f 69 |idx < 0 ||| tmp_i|
|00001da0| 64 78 20 3e 3d 20 72 2d | 3e 6c 65 6e 20 7c 7c 0a |dx >= r-|>len ||.|
|00001db0| 09 20 20 20 20 20 72 2d | 3e 65 6c 74 5b 74 6d 70 |. r-|>elt[tmp|
|00001dc0| 5f 69 64 78 5d 2e 63 6f | 6c 20 21 3d 20 63 6f 6c |_idx].co|l != col|
|00001dd0| 20 29 0a 09 20 20 20 20 | 65 72 72 6f 72 28 45 5f | ).. |error(E_|
|00001de0| 49 4e 54 45 52 4e 2c 22 | 63 68 61 73 65 5f 70 61 |INTERN,"|chase_pa|
|00001df0| 73 74 22 29 3b 0a 09 74 | 6d 70 5f 72 6f 77 20 3d |st");..t|mp_row =|
|00001e00| 20 72 2d 3e 65 6c 74 5b | 74 6d 70 5f 69 64 78 5d | r->elt[|tmp_idx]|
|00001e10| 2e 6e 78 74 5f 72 6f 77 | 3b 0a 09 74 6d 70 5f 69 |.nxt_row|;..tmp_i|
|00001e20| 64 78 20 3d 20 72 2d 3e | 65 6c 74 5b 74 6d 70 5f |dx = r->|elt[tmp_|
|00001e30| 69 64 78 5d 2e 6e 78 74 | 5f 69 64 78 3b 0a 20 20 |idx].nxt|_idx;. |
|00001e40| 20 20 7d 0a 0a 20 20 20 | 20 2a 72 6f 77 5f 6e 75 | }.. | *row_nu|
|00001e50| 6d 20 3d 20 74 6d 70 5f | 72 6f 77 3b 0a 20 20 20 |m = tmp_|row;. |
|00001e60| 20 2a 69 64 78 20 3d 20 | 74 6d 70 5f 69 64 78 3b | *idx = |tmp_idx;|
|00001e70| 0a 20 20 20 20 69 66 20 | 28 20 74 6d 70 5f 72 6f |. if |( tmp_ro|
|00001e80| 77 20 3c 20 30 20 29 0a | 09 65 20 3d 20 28 72 6f |w < 0 ).|.e = (ro|
|00001e90| 77 5f 65 6c 74 20 2a 29 | 4e 55 4c 4c 3b 0a 20 20 |w_elt *)|NULL;. |
|00001ea0| 20 20 65 6c 73 65 0a 20 | 20 20 20 7b 0a 09 69 66 | else. | {..if|
|00001eb0| 20 28 20 74 6d 70 5f 69 | 64 78 20 3c 20 30 20 7c | ( tmp_i|dx < 0 ||
|00001ec0| 7c 20 74 6d 70 5f 69 64 | 78 20 3e 3d 20 41 2d 3e || tmp_id|x >= A->|
|00001ed0| 72 6f 77 5b 74 6d 70 5f | 72 6f 77 5d 2e 6c 65 6e |row[tmp_|row].len|
|00001ee0| 20 7c 7c 0a 09 20 20 20 | 20 20 41 2d 3e 72 6f 77 | ||.. | A->row|
|00001ef0| 5b 74 6d 70 5f 72 6f 77 | 5d 2e 65 6c 74 5b 74 6d |[tmp_row|].elt[tm|
|00001f00| 70 5f 69 64 78 5d 2e 63 | 6f 6c 20 21 3d 20 63 6f |p_idx].c|ol != co|
|00001f10| 6c 20 29 0a 09 20 20 20 | 20 65 72 72 6f 72 28 45 |l ).. | error(E|
|00001f20| 5f 49 4e 54 45 52 4e 2c | 22 62 75 6d 70 5f 63 6f |_INTERN,|"bump_co|
|00001f30| 6c 22 29 3b 0a 09 65 20 | 3d 20 26 28 41 2d 3e 72 |l");..e |= &(A->r|
|00001f40| 6f 77 5b 74 6d 70 5f 72 | 6f 77 5d 2e 65 6c 74 5b |ow[tmp_r|ow].elt[|
|00001f50| 74 6d 70 5f 69 64 78 5d | 29 3b 0a 20 20 20 20 7d |tmp_idx]|);. }|
|00001f60| 0a 0a 20 20 20 20 72 65 | 74 75 72 6e 20 65 3b 0a |.. re|turn e;.|
|00001f70| 7d 0a 0a 2f 2a 20 62 75 | 6d 70 5f 63 6f 6c 20 2d |}../* bu|mp_col -|
|00001f80| 2d 20 6d 6f 76 65 20 61 | 6c 6f 6e 67 20 74 6f 20 |- move a|long to |
|00001f90| 6e 65 78 74 20 6e 6f 6e | 7a 65 72 6f 20 65 6e 74 |next non|zero ent|
|00001fa0| 72 79 20 69 6e 20 63 6f | 6c 75 6d 6e 20 63 6f 6c |ry in co|lumn col|
|00001fb0| 20 61 66 74 65 72 20 72 | 6f 77 5f 6e 75 6d 0a 09 | after r|ow_num..|
|00001fc0| 2d 2d 20 75 70 64 61 74 | 65 20 72 6f 77 5f 6e 75 |-- updat|e row_nu|
|00001fd0| 6d 20 61 6e 64 20 69 64 | 78 20 2a 2f 0a 72 6f 77 |m and id|x */.row|
|00001fe0| 5f 65 6c 74 20 2a 62 75 | 6d 70 5f 63 6f 6c 28 41 |_elt *bu|mp_col(A|
|00001ff0| 2c 20 63 6f 6c 2c 20 72 | 6f 77 5f 6e 75 6d 2c 20 |, col, r|ow_num, |
|00002000| 69 64 78 29 0a 53 50 4d | 41 54 09 2a 41 3b 0a 69 |idx).SPM|AT.*A;.i|
|00002010| 6e 74 09 63 6f 6c 2c 20 | 2a 72 6f 77 5f 6e 75 6d |nt.col, |*row_num|
|00002020| 2c 20 2a 69 64 78 3b 0a | 7b 0a 20 20 20 20 53 50 |, *idx;.|{. SP|
|00002030| 52 4f 57 09 2a 72 3b 0a | 20 20 20 20 72 6f 77 5f |ROW.*r;.| row_|
|00002040| 65 6c 74 09 2a 65 3b 0a | 20 20 20 20 69 6e 74 09 |elt.*e;.| int.|
|00002050| 09 74 6d 70 5f 72 6f 77 | 2c 20 74 6d 70 5f 69 64 |.tmp_row|, tmp_id|
|00002060| 78 3b 0a 0a 20 20 20 20 | 74 6d 70 5f 72 6f 77 20 |x;.. |tmp_row |
|00002070| 3d 20 2a 72 6f 77 5f 6e | 75 6d 3b 0a 20 20 20 20 |= *row_n|um;. |
|00002080| 74 6d 70 5f 69 64 78 20 | 3d 20 2a 69 64 78 3b 0a |tmp_idx |= *idx;.|
|00002090| 20 20 20 20 2f 2a 20 70 | 72 69 6e 74 66 28 22 62 | /* p|rintf("b|
|000020a0| 75 6d 70 5f 63 6f 6c 3a | 20 63 6f 6c 20 3d 20 25 |ump_col:| col = %|
|000020b0| 64 2c 20 72 6f 77 23 20 | 3d 20 25 64 2c 20 69 64 |d, row# |= %d, id|
|000020c0| 78 20 3d 20 25 64 5c 6e | 22 2c 0a 09 20 20 20 63 |x = %d\n|",.. c|
|000020d0| 6f 6c 2c 20 2a 72 6f 77 | 5f 6e 75 6d 2c 20 2a 69 |ol, *row|_num, *i|
|000020e0| 64 78 29 3b 20 2a 2f 0a | 20 20 20 20 69 66 20 28 |dx); */.| if (|
|000020f0| 20 74 6d 70 5f 72 6f 77 | 20 3c 20 30 20 29 0a 20 | tmp_row| < 0 ). |
|00002100| 20 20 20 7b 0a 09 74 6d | 70 5f 72 6f 77 20 3d 20 | {..tm|p_row = |
|00002110| 41 2d 3e 73 74 61 72 74 | 5f 72 6f 77 5b 63 6f 6c |A->start|_row[col|
|00002120| 5d 3b 0a 09 74 6d 70 5f | 69 64 78 20 3d 20 41 2d |];..tmp_|idx = A-|
|00002130| 3e 73 74 61 72 74 5f 69 | 64 78 5b 63 6f 6c 5d 3b |>start_i|dx[col];|
|00002140| 0a 20 20 20 20 7d 0a 20 | 20 20 20 65 6c 73 65 0a |. }. | else.|
|00002150| 20 20 20 20 7b 0a 09 72 | 20 3d 20 26 28 41 2d 3e | {..r| = &(A->|
|00002160| 72 6f 77 5b 74 6d 70 5f | 72 6f 77 5d 29 3b 0a 09 |row[tmp_|row]);..|
|00002170| 69 66 20 28 20 74 6d 70 | 5f 69 64 78 20 3c 20 30 |if ( tmp|_idx < 0|
|00002180| 20 7c 7c 20 74 6d 70 5f | 69 64 78 20 3e 3d 20 72 | || tmp_|idx >= r|
|00002190| 2d 3e 6c 65 6e 20 7c 7c | 0a 09 20 20 20 20 20 72 |->len |||.. r|
|000021a0| 2d 3e 65 6c 74 5b 74 6d | 70 5f 69 64 78 5d 2e 63 |->elt[tm|p_idx].c|
|000021b0| 6f 6c 20 21 3d 20 63 6f | 6c 20 29 0a 09 20 20 20 |ol != co|l ).. |
|000021c0| 20 65 72 72 6f 72 28 45 | 5f 49 4e 54 45 52 4e 2c | error(E|_INTERN,|
|000021d0| 22 62 75 6d 70 5f 63 6f | 6c 22 29 3b 0a 09 65 20 |"bump_co|l");..e |
|000021e0| 3d 20 26 28 72 2d 3e 65 | 6c 74 5b 74 6d 70 5f 69 |= &(r->e|lt[tmp_i|
|000021f0| 64 78 5d 29 3b 0a 09 74 | 6d 70 5f 72 6f 77 20 3d |dx]);..t|mp_row =|
|00002200| 20 65 2d 3e 6e 78 74 5f | 72 6f 77 3b 0a 09 74 6d | e->nxt_|row;..tm|
|00002210| 70 5f 69 64 78 20 3d 20 | 65 2d 3e 6e 78 74 5f 69 |p_idx = |e->nxt_i|
|00002220| 64 78 3b 0a 20 20 20 20 | 7d 0a 20 20 20 20 69 66 |dx;. |}. if|
|00002230| 20 28 20 74 6d 70 5f 72 | 6f 77 20 3c 20 30 20 29 | ( tmp_r|ow < 0 )|
|00002240| 0a 20 20 20 20 7b 0a 09 | 65 20 3d 20 28 72 6f 77 |. {..|e = (row|
|00002250| 5f 65 6c 74 20 2a 29 4e | 55 4c 4c 3b 0a 09 74 6d |_elt *)N|ULL;..tm|
|00002260| 70 5f 69 64 78 20 3d 20 | 63 6f 6c 3b 0a 20 20 20 |p_idx = |col;. |
|00002270| 20 7d 0a 20 20 20 20 65 | 6c 73 65 0a 20 20 20 20 | }. e|lse. |
|00002280| 7b 0a 09 69 66 20 28 20 | 74 6d 70 5f 69 64 78 20 |{..if ( |tmp_idx |
|00002290| 3c 20 30 20 7c 7c 20 74 | 6d 70 5f 69 64 78 20 3e |< 0 || t|mp_idx >|
|000022a0| 3d 20 41 2d 3e 72 6f 77 | 5b 74 6d 70 5f 72 6f 77 |= A->row|[tmp_row|
|000022b0| 5d 2e 6c 65 6e 20 7c 7c | 0a 09 20 20 20 20 20 41 |].len |||.. A|
|000022c0| 2d 3e 72 6f 77 5b 74 6d | 70 5f 72 6f 77 5d 2e 65 |->row[tm|p_row].e|
|000022d0| 6c 74 5b 74 6d 70 5f 69 | 64 78 5d 2e 63 6f 6c 20 |lt[tmp_i|dx].col |
|000022e0| 21 3d 20 63 6f 6c 20 29 | 0a 09 20 20 20 20 65 72 |!= col )|.. er|
|000022f0| 72 6f 72 28 45 5f 49 4e | 54 45 52 4e 2c 22 62 75 |ror(E_IN|TERN,"bu|
|00002300| 6d 70 5f 63 6f 6c 22 29 | 3b 0a 09 65 20 3d 20 26 |mp_col")|;..e = &|
|00002310| 28 41 2d 3e 72 6f 77 5b | 74 6d 70 5f 72 6f 77 5d |(A->row[|tmp_row]|
|00002320| 2e 65 6c 74 5b 74 6d 70 | 5f 69 64 78 5d 29 3b 0a |.elt[tmp|_idx]);.|
|00002330| 20 20 20 20 7d 0a 20 20 | 20 20 2a 72 6f 77 5f 6e | }. | *row_n|
|00002340| 75 6d 20 3d 20 74 6d 70 | 5f 72 6f 77 3b 0a 20 20 |um = tmp|_row;. |
|00002350| 20 20 2a 69 64 78 20 3d | 20 74 6d 70 5f 69 64 78 | *idx =| tmp_idx|
|00002360| 3b 0a 0a 20 20 20 20 72 | 65 74 75 72 6e 20 65 3b |;.. r|eturn e;|
|00002370| 0a 7d 0a 0a 0a 46 69 6c | 65 44 61 74 61 82 73 70 |.}...Fil|eData.sp|
|00002380| 74 6f 72 74 00 00 00 00 | 00 16 2c 00 00 45 ff ff |tort....|..,..E..|
|00002390| ff 0c 23 52 2f 03 00 39 | 92 0a 2f 2a 2a 2a 2a 2a |..#R/..9|../*****|
|000023a0| 2a 2a 2a 2a 2a 2a 2a 2a | 2a 2a 2a 2a 2a 2a 2a 2a |********|********|
|000023b0| 2a 2a 2a 2a 2a 2a 2a 2a | 2a 2a 2a 2a 2a 2a 2a 2a |********|********|
|000023c0| 2a 2a 2a 2a 2a 2a 2a 2a | 2a 2a 2a 2a 2a 2a 2a 2a |********|********|
|000023d0| 2a 2a 2a 2a 2a 2a 2a 2a | 2a 2a 2a 2a 2a 2a 2a 2a |********|********|
|000023e0| 2a 2a 2a 2a 2a 0a 2a 2a | 0a 2a 2a 20 43 6f 70 79 |*****.**|.** Copy|
|000023f0| 72 69 67 68 74 20 28 43 | 29 20 31 39 39 33 20 44 |right (C|) 1993 D|
|00002400| 61 76 69 64 20 45 2e 20 | 53 74 65 77 61 72 64 20 |avid E. |Steward |
|00002410| 26 20 5a 62 69 67 6e 69 | 65 77 20 4c 65 79 6b 2c |& Zbigni|ew Leyk,|
|00002420| 20 61 6c 6c 20 72 69 67 | 68 74 73 20 72 65 73 65 | all rig|hts rese|
|00002430| 72 76 65 64 2e 0a 2a 2a | 0a 2a 2a 09 09 09 20 20 |rved..**|.**... |
|00002440| 20 20 20 4d 65 73 63 68 | 61 63 68 20 4c 69 62 72 | Mesch|ach Libr|
|00002450| 61 72 79 0a 2a 2a 20 0a | 2a 2a 20 54 68 69 73 20 |ary.** .|** This |
|00002460| 4d 65 73 63 68 61 63 68 | 20 4c 69 62 72 61 72 79 |Meschach| Library|
|00002470| 20 69 73 20 70 72 6f 76 | 69 64 65 64 20 22 61 73 | is prov|ided "as|
|00002480| 20 69 73 22 20 77 69 74 | 68 6f 75 74 20 61 6e 79 | is" wit|hout any|
|00002490| 20 65 78 70 72 65 73 73 | 20 0a 2a 2a 20 6f 72 20 | express| .** or |
|000024a0| 69 6d 70 6c 69 65 64 20 | 77 61 72 72 61 6e 74 79 |implied |warranty|
|000024b0| 20 6f 66 20 61 6e 79 20 | 6b 69 6e 64 20 77 69 74 | of any |kind wit|
|000024c0| 68 20 72 65 73 70 65 63 | 74 20 74 6f 20 74 68 69 |h respec|t to thi|
|000024d0| 73 20 73 6f 66 74 77 61 | 72 65 2e 20 0a 2a 2a 20 |s softwa|re. .** |
|000024e0| 49 6e 20 70 61 72 74 69 | 63 75 6c 61 72 20 74 68 |In parti|cular th|
|000024f0| 65 20 61 75 74 68 6f 72 | 73 20 73 68 61 6c 6c 20 |e author|s shall |
|00002500| 6e 6f 74 20 62 65 20 6c | 69 61 62 6c 65 20 66 6f |not be l|iable fo|
|00002510| 72 20 61 6e 79 20 64 69 | 72 65 63 74 2c 20 0a 2a |r any di|rect, .*|
|00002520| 2a 20 69 6e 64 69 72 65 | 63 74 2c 20 73 70 65 63 |* indire|ct, spec|
|00002530| 69 61 6c 2c 20 69 6e 63 | 69 64 65 6e 74 61 6c 20 |ial, inc|idental |
|00002540| 6f 72 20 63 6f 6e 73 65 | 71 75 65 6e 74 69 61 6c |or conse|quential|
|00002550| 20 64 61 6d 61 67 65 73 | 20 61 72 69 73 69 6e 67 | damages| arising|
|00002560| 20 0a 2a 2a 20 69 6e 20 | 61 6e 79 20 77 61 79 20 | .** in |any way |
|00002570| 66 72 6f 6d 20 75 73 65 | 20 6f 66 20 74 68 65 20 |from use| of the |
|00002580| 73 6f 66 74 77 61 72 65 | 2e 0a 2a 2a 20 0a 2a 2a |software|..** .**|
|00002590| 20 45 76 65 72 79 6f 6e | 65 20 69 73 20 67 72 61 | Everyon|e is gra|
|000025a0| 6e 74 65 64 20 70 65 72 | 6d 69 73 73 69 6f 6e 20 |nted per|mission |
|000025b0| 74 6f 20 63 6f 70 79 2c | 20 6d 6f 64 69 66 79 20 |to copy,| modify |
|000025c0| 61 6e 64 20 72 65 64 69 | 73 74 72 69 62 75 74 65 |and redi|stribute|
|000025d0| 20 74 68 69 73 0a 2a 2a | 20 4d 65 73 63 68 61 63 | this.**| Meschac|
|000025e0| 68 20 4c 69 62 72 61 72 | 79 2c 20 70 72 6f 76 69 |h Librar|y, provi|
|000025f0| 64 65 64 3a 0a 2a 2a 20 | 20 31 2e 20 20 41 6c 6c |ded:.** | 1. All|
|00002600| 20 63 6f 70 69 65 73 20 | 63 6f 6e 74 61 69 6e 20 | copies |contain |
|00002610| 74 68 69 73 20 63 6f 70 | 79 72 69 67 68 74 20 6e |this cop|yright n|
|00002620| 6f 74 69 63 65 2e 0a 2a | 2a 20 20 32 2e 20 20 41 |otice..*|* 2. A|
|00002630| 6c 6c 20 6d 6f 64 69 66 | 69 65 64 20 63 6f 70 69 |ll modif|ied copi|
|00002640| 65 73 20 73 68 61 6c 6c | 20 63 61 72 72 79 20 61 |es shall| carry a|
|00002650| 20 6e 6f 74 69 63 65 20 | 73 74 61 74 69 6e 67 20 | notice |stating |
|00002660| 77 68 6f 0a 2a 2a 20 20 | 20 20 20 20 6d 61 64 65 |who.** | made|
|00002670| 20 74 68 65 20 6c 61 73 | 74 20 6d 6f 64 69 66 69 | the las|t modifi|
|00002680| 63 61 74 69 6f 6e 20 61 | 6e 64 20 74 68 65 20 64 |cation a|nd the d|
|00002690| 61 74 65 20 6f 66 20 73 | 75 63 68 20 6d 6f 64 69 |ate of s|uch modi|
|000026a0| 66 69 63 61 74 69 6f 6e | 2e 0a 2a 2a 20 20 33 2e |fication|..** 3.|
|000026b0| 20 20 4e 6f 20 63 68 61 | 72 67 65 20 69 73 20 6d | No cha|rge is m|
|000026c0| 61 64 65 20 66 6f 72 20 | 74 68 69 73 20 73 6f 66 |ade for |this sof|
|000026d0| 74 77 61 72 65 20 6f 72 | 20 77 6f 72 6b 73 20 64 |tware or| works d|
|000026e0| 65 72 69 76 65 64 20 66 | 72 6f 6d 20 69 74 2e 20 |erived f|rom it. |
|000026f0| 20 0a 2a 2a 20 20 20 20 | 20 20 54 68 69 73 20 63 | .** | This c|
|00002700| 6c 61 75 73 65 20 73 68 | 61 6c 6c 20 6e 6f 74 20 |lause sh|all not |
|00002710| 62 65 20 63 6f 6e 73 74 | 72 75 65 64 20 61 73 20 |be const|rued as |
|00002720| 63 6f 6e 73 74 72 61 69 | 6e 69 6e 67 20 6f 74 68 |constrai|ning oth|
|00002730| 65 72 20 73 6f 66 74 77 | 61 72 65 0a 2a 2a 20 20 |er softw|are.** |
|00002740| 20 20 20 20 64 69 73 74 | 72 69 62 75 74 65 64 20 | dist|ributed |
|00002750| 6f 6e 20 74 68 65 20 73 | 61 6d 65 20 6d 65 64 69 |on the s|ame medi|
|00002760| 75 6d 20 61 73 20 74 68 | 69 73 20 73 6f 66 74 77 |um as th|is softw|
|00002770| 61 72 65 2c 20 6e 6f 72 | 20 69 73 20 61 0a 2a 2a |are, nor| is a.**|
|00002780| 20 20 20 20 20 20 64 69 | 73 74 72 69 62 75 74 69 | di|stributi|
|00002790| 6f 6e 20 66 65 65 20 63 | 6f 6e 73 69 64 65 72 65 |on fee c|onsidere|
|000027a0| 64 20 61 20 63 68 61 72 | 67 65 2e 0a 2a 2a 0a 2a |d a char|ge..**.*|
|000027b0| 2a 2a 2a 2a 2a 2a 2a 2a | 2a 2a 2a 2a 2a 2a 2a 2a |********|********|
|000027c0| 2a 2a 2a 2a 2a 2a 2a 2a | 2a 2a 2a 2a 2a 2a 2a 2a |********|********|
|000027d0| 2a 2a 2a 2a 2a 2a 2a 2a | 2a 2a 2a 2a 2a 2a 2a 2a |********|********|
|000027e0| 2a 2a 2a 2a 2a 2a 2a 2a | 2a 2a 2a 2a 2a 2a 2a 2a |********|********|
|000027f0| 2a 2a 2a 2a 2a 2a 2a 2a | 2a 2a 2f 0a 0a 0a 2f 2a |********|**/.../*|
|00002800| 0a 09 54 68 69 73 20 66 | 69 6c 65 20 63 6f 6e 74 |..This f|ile cont|
|00002810| 61 69 6e 73 20 74 65 73 | 74 73 20 66 6f 72 20 74 |ains tes|ts for t|
|00002820| 68 65 20 73 70 61 72 73 | 65 20 6d 61 74 72 69 78 |he spars|e matrix|
|00002830| 20 70 61 72 74 20 6f 66 | 20 4d 65 73 63 68 61 63 | part of| Meschac|
|00002840| 68 0a 2a 2f 0a 0a 23 69 | 6e 63 6c 75 64 65 09 3c |h.*/..#i|nclude.<|
|00002850| 73 74 64 69 6f 2e 68 3e | 0a 23 69 6e 63 6c 75 64 |stdio.h>|.#includ|
|00002860| 65 09 3c 6d 61 74 68 2e | 68 3e 0a 23 69 6e 63 6c |e.<math.|h>.#incl|
|00002870| 75 64 65 09 22 6d 61 74 | 72 69 78 32 2e 68 22 0a |ude."mat|rix2.h".|
|00002880| 23 69 6e 63 6c 75 64 65 | 09 22 73 70 61 72 73 65 |#include|."sparse|
|00002890| 32 2e 68 22 0a 23 69 6e | 63 6c 75 64 65 20 20 20 |2.h".#in|clude |
|000028a0| 20 20 20 20 20 22 69 74 | 65 72 2e 68 22 0a 0a 23 | "it|er.h"..#|
|000028b0| 64 65 66 69 6e 65 09 65 | 72 72 6d 65 73 67 28 6d |define.e|rrmesg(m|
|000028c0| 65 73 67 29 09 70 72 69 | 6e 74 66 28 22 45 72 72 |esg).pri|ntf("Err|
|000028d0| 6f 72 3a 20 25 73 20 65 | 72 72 6f 72 3a 20 6c 69 |or: %s e|rror: li|
|000028e0| 6e 65 20 25 64 5c 6e 22 | 2c 6d 65 73 67 2c 5f 5f |ne %d\n"|,mesg,__|
|000028f0| 4c 49 4e 45 5f 5f 29 0a | 23 64 65 66 69 6e 65 20 |LINE__).|#define |
|00002900| 6e 6f 74 69 63 65 28 6d | 65 73 67 29 09 70 72 69 |notice(m|esg).pri|
|00002910| 6e 74 66 28 22 23 20 54 | 65 73 74 69 6e 67 20 25 |ntf("# T|esting %|
|00002920| 73 2e 2e 2e 5c 6e 22 2c | 6d 65 73 67 29 3b 0a 0a |s...\n",|mesg);..|
|00002930| 2f 2a 20 66 6f 72 20 69 | 74 65 72 61 74 69 76 65 |/* for i|terative|
|00002940| 20 6d 65 74 68 6f 64 73 | 20 2a 2f 0a 0a 23 69 66 | methods| */..#if|
|00002950| 20 52 45 41 4c 20 3d 3d | 20 44 4f 55 42 4c 45 0a | REAL ==| DOUBLE.|
|00002960| 23 64 65 66 69 6e 65 09 | 45 50 53 09 31 65 2d 37 |#define.|EPS.1e-7|
|00002970| 0a 23 65 6c 69 66 20 52 | 45 41 4c 20 3d 3d 20 46 |.#elif R|EAL == F|
|00002980| 4c 4f 41 54 0a 23 64 65 | 66 69 6e 65 20 45 50 53 |LOAT.#de|fine EPS|
|00002990| 20 20 20 31 65 2d 33 0a | 23 65 6e 64 69 66 0a 0a | 1e-3.|#endif..|
|000029a0| 69 6e 74 09 63 68 6b 5f | 63 6f 6c 5f 61 63 63 65 |int.chk_|col_acce|
|000029b0| 73 73 28 41 29 0a 53 50 | 4d 41 54 09 2a 41 3b 0a |ss(A).SP|MAT.*A;.|
|000029c0| 7b 0a 20 20 20 20 69 6e | 74 09 09 69 2c 20 6a 2c |{. in|t..i, j,|
|000029d0| 20 6e 78 74 5f 69 64 78 | 2c 20 6e 78 74 5f 72 6f | nxt_idx|, nxt_ro|
|000029e0| 77 2c 20 73 63 61 6e 5f | 63 6e 74 2c 20 74 6f 74 |w, scan_|cnt, tot|
|000029f0| 61 6c 5f 63 6e 74 3b 0a | 20 20 20 20 53 50 52 4f |al_cnt;.| SPRO|
|00002a00| 57 09 2a 72 3b 0a 20 20 | 20 20 72 6f 77 5f 65 6c |W.*r;. | row_el|
|00002a10| 74 09 2a 65 3b 0a 0a 20 | 20 20 20 69 66 20 28 20 |t.*e;.. | if ( |
|00002a20| 21 20 41 20 29 0a 09 65 | 72 72 6f 72 28 45 5f 4e |! A )..e|rror(E_N|
|00002a30| 55 4c 4c 2c 22 63 68 6b | 5f 63 6f 6c 5f 61 63 63 |ULL,"chk|_col_acc|
|00002a40| 65 73 73 22 29 3b 0a 20 | 20 20 20 69 66 20 28 20 |ess");. | if ( |
|00002a50| 21 20 41 2d 3e 66 6c 61 | 67 5f 63 6f 6c 20 29 0a |! A->fla|g_col ).|
|00002a60| 09 72 65 74 75 72 6e 20 | 46 41 4c 53 45 3b 0a 0a |.return |FALSE;..|
|00002a70| 20 20 20 20 2f 2a 20 73 | 63 61 6e 20 64 6f 77 6e | /* s|can down|
|00002a80| 20 65 61 63 68 20 63 6f | 6c 75 6d 6e 2c 20 63 6f | each co|lumn, co|
|00002a90| 75 6e 74 69 6e 67 20 74 | 68 65 20 6e 75 6d 62 65 |unting t|he numbe|
|00002aa0| 72 20 6f 66 20 65 6e 74 | 72 69 65 73 20 6d 65 74 |r of ent|ries met|
|00002ab0| 20 2a 2f 0a 20 20 20 20 | 73 63 61 6e 5f 63 6e 74 | */. |scan_cnt|
|00002ac0| 20 3d 20 30 3b 0a 20 20 | 20 20 66 6f 72 20 28 20 | = 0;. | for ( |
|00002ad0| 6a 20 3d 20 30 3b 20 6a | 20 3c 20 41 2d 3e 6e 3b |j = 0; j| < A->n;|
|00002ae0| 20 6a 2b 2b 20 29 0a 20 | 20 20 20 7b 0a 09 69 20 | j++ ). | {..i |
|00002af0| 3d 20 2d 31 3b 0a 09 6e | 78 74 5f 69 64 78 20 3d |= -1;..n|xt_idx =|
|00002b00| 20 41 2d 3e 73 74 61 72 | 74 5f 69 64 78 5b 6a 5d | A->star|t_idx[j]|
|00002b10| 3b 0a 09 6e 78 74 5f 72 | 6f 77 20 3d 20 41 2d 3e |;..nxt_r|ow = A->|
|00002b20| 73 74 61 72 74 5f 72 6f | 77 5b 6a 5d 3b 0a 09 77 |start_ro|w[j];..w|
|00002b30| 68 69 6c 65 20 28 20 6e | 78 74 5f 72 6f 77 20 3e |hile ( n|xt_row >|
|00002b40| 3d 20 30 20 26 26 20 6e | 78 74 5f 69 64 78 20 3e |= 0 && n|xt_idx >|
|00002b50| 3d 20 30 20 26 26 20 6e | 78 74 5f 72 6f 77 20 3e |= 0 && n|xt_row >|
|00002b60| 20 69 20 29 0a 09 7b 0a | 09 20 20 20 20 69 20 3d | i )..{.|. i =|
|00002b70| 20 6e 78 74 5f 72 6f 77 | 3b 0a 09 20 20 20 20 72 | nxt_row|;.. r|
|00002b80| 20 3d 20 26 28 41 2d 3e | 72 6f 77 5b 69 5d 29 3b | = &(A->|row[i]);|
|00002b90| 0a 09 20 20 20 20 65 20 | 3d 20 26 28 72 2d 3e 65 |.. e |= &(r->e|
|00002ba0| 6c 74 5b 6e 78 74 5f 69 | 64 78 5d 29 3b 0a 09 20 |lt[nxt_i|dx]);.. |
|00002bb0| 20 20 20 6e 78 74 5f 69 | 64 78 20 3d 20 65 2d 3e | nxt_i|dx = e->|
|00002bc0| 6e 78 74 5f 69 64 78 3b | 0a 09 20 20 20 20 6e 78 |nxt_idx;|.. nx|
|00002bd0| 74 5f 72 6f 77 20 3d 20 | 65 2d 3e 6e 78 74 5f 72 |t_row = |e->nxt_r|
|00002be0| 6f 77 3b 0a 09 20 20 20 | 20 73 63 61 6e 5f 63 6e |ow;.. | scan_cn|
|00002bf0| 74 2b 2b 3b 0a 09 7d 0a | 20 20 20 20 7d 0a 0a 20 |t++;..}.| }.. |
|00002c00| 20 20 20 74 6f 74 61 6c | 5f 63 6e 74 20 3d 20 30 | total|_cnt = 0|
|00002c10| 3b 0a 20 20 20 20 66 6f | 72 20 28 20 69 20 3d 20 |;. fo|r ( i = |
|00002c20| 30 3b 20 69 20 3c 20 41 | 2d 3e 6d 3b 20 69 2b 2b |0; i < A|->m; i++|
|00002c30| 20 29 0a 09 74 6f 74 61 | 6c 5f 63 6e 74 20 2b 3d | )..tota|l_cnt +=|
|00002c40| 20 41 2d 3e 72 6f 77 5b | 69 5d 2e 6c 65 6e 3b 0a | A->row[|i].len;.|
|00002c50| 20 20 20 20 69 66 20 28 | 20 74 6f 74 61 6c 5f 63 | if (| total_c|
|00002c60| 6e 74 20 21 3d 20 73 63 | 61 6e 5f 63 6e 74 20 29 |nt != sc|an_cnt )|
|00002c70| 0a 09 72 65 74 75 72 6e | 20 46 41 4c 53 45 3b 0a |..return| FALSE;.|
|00002c80| 20 20 20 20 65 6c 73 65 | 0a 09 72 65 74 75 72 6e | else|..return|
|00002c90| 20 54 52 55 45 3b 0a 7d | 0a 0a 0a 76 6f 69 64 09 | TRUE;.}|...void.|
|00002ca0| 6d 61 69 6e 28 61 72 67 | 63 2c 20 61 72 67 76 29 |main(arg|c, argv)|
|00002cb0| 0a 69 6e 74 09 61 72 67 | 63 3b 0a 63 68 61 72 09 |.int.arg|c;.char.|
|00002cc0| 2a 61 72 67 76 5b 5d 3b | 0a 7b 0a 20 20 20 20 56 |*argv[];|.{. V|
|00002cd0| 45 43 09 09 2a 78 2c 20 | 2a 79 2c 20 2a 7a 2c 20 |EC..*x, |*y, *z, |
|00002ce0| 2a 75 2c 20 2a 76 3b 0a | 20 20 20 20 52 65 61 6c |*u, *v;.| Real|
|00002cf0| 09 73 31 2c 20 73 32 3b | 0a 20 20 20 20 50 45 52 |.s1, s2;|. PER|
|00002d00| 4d 09 2a 70 69 76 6f 74 | 3b 0a 20 20 20 20 53 50 |M.*pivot|;. SP|
|00002d10| 4d 41 54 09 2a 41 2c 20 | 2a 42 2c 20 2a 43 3b 0a |MAT.*A, |*B, *C;.|
|00002d20| 20 20 20 20 53 50 4d 41 | 54 20 20 20 20 20 20 20 | SPMA|T |
|00002d30| 2a 42 31 2c 20 2a 43 31 | 3b 0a 20 20 20 20 53 50 |*B1, *C1|;. SP|
|00002d40| 52 4f 57 09 2a 72 3b 0a | 20 20 20 20 69 6e 74 09 |ROW.*r;.| int.|
|00002d50| 09 69 2c 20 6a 2c 20 6b | 2c 20 64 65 67 2c 20 73 |.i, j, k|, deg, s|
|00002d60| 65 65 64 2c 20 6d 2c 20 | 6d 5f 6f 6c 64 2c 20 6e |eed, m, |m_old, n|
|00002d70| 2c 20 6e 5f 6f 6c 64 3b | 0a 0a 0a 20 20 20 20 6d |, n_old;|... m|
|00002d80| 65 6d 5f 69 6e 66 6f 5f | 6f 6e 28 54 52 55 45 29 |em_info_|on(TRUE)|
|00002d90| 3b 0a 0a 20 20 20 20 73 | 65 74 62 75 66 28 73 74 |;.. s|etbuf(st|
|00002da0| 64 6f 75 74 2c 20 28 63 | 68 61 72 20 2a 29 4e 55 |dout, (c|har *)NU|
|00002db0| 4c 4c 29 3b 0a 20 20 20 | 20 2f 2a 20 67 65 74 20 |LL);. | /* get |
|00002dc0| 73 65 65 64 20 69 66 20 | 69 6e 20 61 72 67 75 6d |seed if |in argum|
|00002dd0| 65 6e 74 20 6c 69 73 74 | 20 2a 2f 0a 20 20 20 20 |ent list| */. |
|00002de0| 69 66 20 28 20 61 72 67 | 63 20 3d 3d 20 31 20 29 |if ( arg|c == 1 )|
|00002df0| 0a 09 73 65 65 64 20 3d | 20 31 31 31 31 3b 0a 20 |..seed =| 1111;. |
|00002e00| 20 20 20 65 6c 73 65 20 | 69 66 20 28 20 61 72 67 | else |if ( arg|
|00002e10| 63 20 3d 3d 20 32 20 26 | 26 20 73 73 63 61 6e 66 |c == 2 &|& sscanf|
|00002e20| 28 61 72 67 76 5b 31 5d | 2c 22 25 64 22 2c 26 73 |(argv[1]|,"%d",&s|
|00002e30| 65 65 64 29 20 3d 3d 20 | 31 20 29 0a 09 3b 0a 20 |eed) == |1 )..;. |
|00002e40| 20 20 20 65 6c 73 65 0a | 20 20 20 20 7b 0a 09 70 | else.| {..p|
|00002e50| 72 69 6e 74 66 28 22 75 | 73 61 67 65 3a 20 25 73 |rintf("u|sage: %s|
|00002e60| 20 5b 73 65 65 64 5d 5c | 6e 22 2c 20 61 72 67 76 | [seed]\|n", argv|
|00002e70| 5b 30 5d 29 3b 0a 09 65 | 78 69 74 28 30 29 3b 0a |[0]);..e|xit(0);.|
|00002e80| 20 20 20 20 7d 0a 20 20 | 20 20 73 72 61 6e 64 28 | }. | srand(|
|00002e90| 73 65 65 64 29 3b 0a 0a | 20 20 20 20 2f 2a 20 73 |seed);..| /* s|
|00002ea0| 65 74 20 75 70 20 74 77 | 6f 20 72 61 6e 64 6f 6d |et up tw|o random|
|00002eb0| 20 73 70 61 72 73 65 20 | 6d 61 74 72 69 63 65 73 | sparse |matrices|
|00002ec0| 20 2a 2f 0a 20 20 20 20 | 6d 20 3d 20 31 32 30 3b | */. |m = 120;|
|00002ed0| 0a 20 20 20 20 6e 20 3d | 20 31 30 30 3b 0a 20 20 |. n =| 100;. |
|00002ee0| 20 20 64 65 67 20 3d 20 | 38 3b 0a 20 20 20 20 6e | deg = |8;. n|
|00002ef0| 6f 74 69 63 65 28 22 61 | 6c 6c 6f 63 61 74 69 6e |otice("a|llocatin|
|00002f00| 67 20 73 70 61 72 73 65 | 20 6d 61 74 72 69 63 65 |g sparse| matrice|
|00002f10| 73 22 29 3b 0a 20 20 20 | 20 41 20 3d 20 73 70 5f |s");. | A = sp_|
|00002f20| 67 65 74 28 6d 2c 6e 2c | 64 65 67 29 3b 0a 20 20 |get(m,n,|deg);. |
|00002f30| 20 20 42 20 3d 20 73 70 | 5f 67 65 74 28 6d 2c 6e | B = sp|_get(m,n|
|00002f40| 2c 64 65 67 29 3b 0a 20 | 20 20 20 6e 6f 74 69 63 |,deg);. | notic|
|00002f50| 65 28 22 73 65 74 74 69 | 6e 67 20 61 6e 64 20 67 |e("setti|ng and g|
|00002f60| 65 74 74 69 6e 67 20 6d | 61 74 72 69 78 20 65 6e |etting m|atrix en|
|00002f70| 74 72 69 65 73 22 29 3b | 0a 20 20 20 20 66 6f 72 |tries");|. for|
|00002f80| 20 28 20 6b 20 3d 20 30 | 3b 20 6b 20 3c 20 6d 2a | ( k = 0|; k < m*|
|00002f90| 64 65 67 3b 20 6b 2b 2b | 20 29 0a 20 20 20 20 7b |deg; k++| ). {|
|00002fa0| 0a 09 69 20 3d 20 28 72 | 61 6e 64 28 29 20 3e 3e |..i = (r|and() >>|
|00002fb0| 20 38 29 20 25 20 6d 3b | 0a 09 6a 20 3d 20 28 72 | 8) % m;|..j = (r|
|00002fc0| 61 6e 64 28 29 20 3e 3e | 20 38 29 20 25 20 6e 3b |and() >>| 8) % n;|
|00002fd0| 0a 09 73 70 5f 73 65 74 | 5f 76 61 6c 28 41 2c 69 |..sp_set|_val(A,i|
|00002fe0| 2c 6a 2c 72 61 6e 64 28 | 29 2f 28 28 52 65 61 6c |,j,rand(|)/((Real|
|00002ff0| 29 4d 41 58 5f 52 41 4e | 44 29 29 3b 0a 09 69 20 |)MAX_RAN|D));..i |
|00003000| 3d 20 28 72 61 6e 64 28 | 29 20 3e 3e 20 38 29 20 |= (rand(|) >> 8) |
|00003010| 25 20 6d 3b 0a 09 6a 20 | 3d 20 28 72 61 6e 64 28 |% m;..j |= (rand(|
|00003020| 29 20 3e 3e 20 38 29 20 | 25 20 6e 3b 0a 09 73 70 |) >> 8) |% n;..sp|
|00003030| 5f 73 65 74 5f 76 61 6c | 28 42 2c 69 2c 6a 2c 72 |_set_val|(B,i,j,r|
|00003040| 61 6e 64 28 29 2f 28 28 | 52 65 61 6c 29 4d 41 58 |and()/((|Real)MAX|
|00003050| 5f 52 41 4e 44 29 29 3b | 0a 20 20 20 20 7d 0a 20 |_RAND));|. }. |
|00003060| 20 20 20 66 6f 72 20 28 | 20 6b 20 3d 20 30 3b 20 | for (| k = 0; |
|00003070| 6b 20 3c 20 31 30 3b 20 | 6b 2b 2b 20 29 0a 20 20 |k < 10; |k++ ). |
|00003080| 20 20 7b 0a 09 73 31 20 | 3d 20 72 61 6e 64 28 29 | {..s1 |= rand()|
|00003090| 2f 28 28 52 65 61 6c 29 | 4d 41 58 5f 52 41 4e 44 |/((Real)|MAX_RAND|
|000030a0| 29 3b 0a 09 69 20 3d 20 | 28 72 61 6e 64 28 29 20 |);..i = |(rand() |
|000030b0| 3e 3e 20 38 29 20 25 20 | 6d 3b 0a 09 6a 20 3d 20 |>> 8) % |m;..j = |
|000030c0| 28 72 61 6e 64 28 29 20 | 3e 3e 20 38 29 20 25 20 |(rand() |>> 8) % |
|000030d0| 6e 3b 0a 09 73 70 5f 73 | 65 74 5f 76 61 6c 28 41 |n;..sp_s|et_val(A|
|000030e0| 2c 69 2c 6a 2c 73 31 29 | 3b 0a 09 73 32 20 3d 20 |,i,j,s1)|;..s2 = |
|000030f0| 73 70 5f 67 65 74 5f 76 | 61 6c 28 41 2c 69 2c 6a |sp_get_v|al(A,i,j|
|00003100| 29 3b 0a 09 69 66 20 28 | 20 66 61 62 73 28 73 31 |);..if (| fabs(s1|
|00003110| 20 2d 20 73 32 29 20 3e | 3d 20 4d 41 43 48 45 50 | - s2) >|= MACHEP|
|00003120| 53 20 29 0a 09 20 20 20 | 20 62 72 65 61 6b 3b 0a |S ).. | break;.|
|00003130| 20 20 20 20 7d 0a 20 20 | 20 20 69 66 20 28 20 6b | }. | if ( k|
|00003140| 20 3c 20 31 30 20 29 0a | 09 65 72 72 6d 65 73 67 | < 10 ).|.errmesg|
|00003150| 28 22 73 70 5f 73 65 74 | 5f 76 61 6c 28 29 2f 73 |("sp_set|_val()/s|
|00003160| 70 5f 67 65 74 5f 76 61 | 6c 28 29 22 29 3b 0a 0a |p_get_va|l()");..|
|00003170| 20 20 20 20 2f 2a 20 74 | 65 73 74 20 63 6f 70 79 | /* t|est copy|
|00003180| 20 72 6f 75 74 69 6e 65 | 73 20 2a 2f 0a 20 20 20 | routine|s */. |
|00003190| 20 6e 6f 74 69 63 65 28 | 22 63 6f 70 79 20 72 6f | notice(|"copy ro|
|000031a0| 75 74 69 6e 65 73 22 29 | 3b 0a 20 20 20 20 78 20 |utines")|;. x |
|000031b0| 3d 20 76 5f 67 65 74 28 | 6e 29 3b 0a 20 20 20 20 |= v_get(|n);. |
|000031c0| 79 20 3d 20 76 5f 67 65 | 74 28 6d 29 3b 0a 20 20 |y = v_ge|t(m);. |
|000031d0| 20 20 7a 20 3d 20 76 5f | 67 65 74 28 6d 29 3b 0a | z = v_|get(m);.|
|000031e0| 20 20 20 20 2f 2a 20 66 | 69 72 73 74 20 63 6f 70 | /* f|irst cop|
|000031f0| 79 20 72 6f 75 74 69 6e | 65 20 2a 2f 0a 20 20 20 |y routin|e */. |
|00003200| 20 43 20 3d 20 73 70 5f | 63 6f 70 79 28 41 29 3b | C = sp_|copy(A);|
|00003210| 0a 20 20 20 20 66 6f 72 | 20 28 20 6b 20 3d 20 30 |. for| ( k = 0|
|00003220| 3b 20 6b 20 3c 20 31 30 | 30 3b 20 6b 2b 2b 20 29 |; k < 10|0; k++ )|
|00003230| 0a 20 20 20 20 7b 0a 09 | 76 5f 72 61 6e 64 28 78 |. {..|v_rand(x|
|00003240| 29 3b 0a 09 73 70 5f 6d | 76 5f 6d 6c 74 28 41 2c |);..sp_m|v_mlt(A,|
|00003250| 78 2c 79 29 3b 0a 09 73 | 70 5f 6d 76 5f 6d 6c 74 |x,y);..s|p_mv_mlt|
|00003260| 28 43 2c 78 2c 7a 29 3b | 0a 09 69 66 20 28 20 76 |(C,x,z);|..if ( v|
|00003270| 5f 6e 6f 72 6d 5f 69 6e | 66 28 76 5f 73 75 62 28 |_norm_in|f(v_sub(|
|00003280| 79 2c 7a 2c 7a 29 29 20 | 3e 3d 20 4d 41 43 48 45 |y,z,z)) |>= MACHE|
|00003290| 50 53 2a 64 65 67 2a 6d | 20 29 0a 09 20 20 20 20 |PS*deg*m| ).. |
|000032a0| 62 72 65 61 6b 3b 0a 20 | 20 20 20 7d 0a 20 20 20 |break;. | }. |
|000032b0| 20 69 66 20 28 20 6b 20 | 3c 20 31 30 30 20 29 0a | if ( k |< 100 ).|
|000032c0| 20 20 20 20 7b 0a 09 65 | 72 72 6d 65 73 67 28 22 | {..e|rrmesg("|
|000032d0| 73 70 5f 63 6f 70 79 28 | 29 2f 73 70 5f 6d 76 5f |sp_copy(|)/sp_mv_|
|000032e0| 6d 6c 74 28 29 22 29 3b | 0a 09 70 72 69 6e 74 66 |mlt()");|..printf|
|000032f0| 28 22 23 20 45 72 72 6f | 72 20 69 6e 20 41 2e 78 |("# Erro|r in A.x|
|00003300| 20 28 69 6e 66 20 6e 6f | 72 6d 29 20 3d 20 25 67 | (inf no|rm) = %g|
|00003310| 20 5b 63 66 20 4d 41 43 | 48 45 50 53 20 3d 20 25 | [cf MAC|HEPS = %|
|00003320| 67 5d 5c 6e 22 2c 0a 09 | 20 20 20 20 20 20 20 76 |g]\n",..| v|
|00003330| 5f 6e 6f 72 6d 5f 69 6e | 66 28 7a 29 2c 20 4d 41 |_norm_in|f(z), MA|
|00003340| 43 48 45 50 53 29 3b 0a | 20 20 20 20 7d 0a 20 20 |CHEPS);.| }. |
|00003350| 20 20 2f 2a 20 73 65 63 | 6f 6e 64 20 63 6f 70 79 | /* sec|ond copy|
|00003360| 20 72 6f 75 74 69 6e 65 | 0a 20 20 20 20 20 20 20 | routine|. |
|00003370| 2d 2d 20 6e 6f 74 65 20 | 74 68 61 74 20 41 20 26 |-- note |that A &|
|00003380| 20 42 20 68 61 76 65 20 | 64 69 66 66 65 72 65 6e | B have |differen|
|00003390| 74 20 73 70 61 72 73 69 | 74 79 20 70 61 74 74 65 |t sparsi|ty patte|
|000033a0| 72 6e 73 20 2a 2f 0a 0a | 20 20 20 20 6d 65 6d 5f |rns */..| mem_|
|000033b0| 73 74 61 74 5f 6d 61 72 | 6b 28 31 29 3b 0a 20 20 |stat_mar|k(1);. |
|000033c0| 20 20 73 70 5f 63 6f 70 | 79 32 28 41 2c 42 29 3b | sp_cop|y2(A,B);|
|000033d0| 0a 20 20 20 20 6d 65 6d | 5f 73 74 61 74 5f 66 72 |. mem|_stat_fr|
|000033e0| 65 65 28 31 29 3b 0a 20 | 20 20 20 66 6f 72 20 28 |ee(1);. | for (|
|000033f0| 20 6b 20 3d 20 30 3b 20 | 6b 20 3c 20 31 30 3b 20 | k = 0; |k < 10; |
|00003400| 6b 2b 2b 20 29 0a 20 20 | 20 20 7b 0a 09 76 5f 72 |k++ ). | {..v_r|
|00003410| 61 6e 64 28 78 29 3b 0a | 09 73 70 5f 6d 76 5f 6d |and(x);.|.sp_mv_m|
|00003420| 6c 74 28 41 2c 78 2c 79 | 29 3b 0a 09 73 70 5f 6d |lt(A,x,y|);..sp_m|
|00003430| 76 5f 6d 6c 74 28 42 2c | 78 2c 7a 29 3b 0a 09 69 |v_mlt(B,|x,z);..i|
|00003440| 66 20 28 20 76 5f 6e 6f | 72 6d 5f 69 6e 66 28 76 |f ( v_no|rm_inf(v|
|00003450| 5f 73 75 62 28 79 2c 7a | 2c 7a 29 29 20 3e 3d 20 |_sub(y,z|,z)) >= |
|00003460| 4d 41 43 48 45 50 53 2a | 64 65 67 2a 6d 20 29 0a |MACHEPS*|deg*m ).|
|00003470| 09 20 20 20 20 62 72 65 | 61 6b 3b 0a 20 20 20 20 |. bre|ak;. |
|00003480| 7d 0a 20 20 20 20 69 66 | 20 28 20 6b 20 3c 20 31 |}. if| ( k < 1|
|00003490| 30 20 29 0a 20 20 20 20 | 7b 0a 09 65 72 72 6d 65 |0 ). |{..errme|
|000034a0| 73 67 28 22 73 70 5f 63 | 6f 70 79 32 28 29 2f 73 |sg("sp_c|opy2()/s|
|000034b0| 70 5f 6d 76 5f 6d 6c 74 | 28 29 22 29 3b 0a 09 70 |p_mv_mlt|()");..p|
|000034c0| 72 69 6e 74 66 28 22 23 | 20 45 72 72 6f 72 20 69 |rintf("#| Error i|
|000034d0| 6e 20 41 2e 78 20 28 69 | 6e 66 20 6e 6f 72 6d 29 |n A.x (i|nf norm)|
|000034e0| 20 3d 20 25 67 20 5b 63 | 66 20 4d 41 43 48 45 50 | = %g [c|f MACHEP|
|000034f0| 53 20 3d 20 25 67 5d 5c | 6e 22 2c 0a 09 20 20 20 |S = %g]\|n",.. |
|00003500| 20 20 20 20 76 5f 6e 6f | 72 6d 5f 69 6e 66 28 7a | v_no|rm_inf(z|
|00003510| 29 2c 20 4d 41 43 48 45 | 50 53 29 3b 0a 20 20 20 |), MACHE|PS);. |
|00003520| 20 7d 0a 0a 20 20 20 20 | 2f 2a 20 6e 6f 77 20 63 | }.. |/* now c|
|00003530| 68 65 63 6b 20 63 6f 6d | 70 61 63 74 69 6e 67 20 |heck com|pacting |
|00003540| 72 6f 75 74 69 6e 65 20 | 2a 2f 0a 20 20 20 20 6e |routine |*/. n|
|00003550| 6f 74 69 63 65 28 22 63 | 6f 6d 70 61 63 74 69 6e |otice("c|ompactin|
|00003560| 67 20 72 6f 75 74 69 6e | 65 22 29 3b 0a 20 20 20 |g routin|e");. |
|00003570| 20 73 70 5f 63 6f 6d 70 | 61 63 74 28 42 2c 30 2e | sp_comp|act(B,0.|
|00003580| 30 29 3b 0a 20 20 20 20 | 66 6f 72 20 28 20 6b 20 |0);. |for ( k |
|00003590| 3d 20 30 3b 20 6b 20 3c | 20 31 30 3b 20 6b 2b 2b |= 0; k <| 10; k++|
|000035a0| 20 29 0a 20 20 20 20 7b | 0a 09 76 5f 72 61 6e 64 | ). {|..v_rand|
|000035b0| 28 78 29 3b 0a 09 73 70 | 5f 6d 76 5f 6d 6c 74 28 |(x);..sp|_mv_mlt(|
|000035c0| 41 2c 78 2c 79 29 3b 0a | 09 73 70 5f 6d 76 5f 6d |A,x,y);.|.sp_mv_m|
|000035d0| 6c 74 28 42 2c 78 2c 7a | 29 3b 0a 09 69 66 20 28 |lt(B,x,z|);..if (|
|000035e0| 20 76 5f 6e 6f 72 6d 5f | 69 6e 66 28 76 5f 73 75 | v_norm_|inf(v_su|
|000035f0| 62 28 79 2c 7a 2c 7a 29 | 29 20 3e 3d 20 4d 41 43 |b(y,z,z)|) >= MAC|
|00003600| 48 45 50 53 2a 64 65 67 | 2a 6d 20 29 0a 09 20 20 |HEPS*deg|*m ).. |
|00003610| 20 20 62 72 65 61 6b 3b | 0a 20 20 20 20 7d 0a 20 | break;|. }. |
|00003620| 20 20 20 69 66 20 28 20 | 6b 20 3c 20 31 30 20 29 | if ( |k < 10 )|
|00003630| 0a 20 20 20 20 7b 0a 09 | 65 72 72 6d 65 73 67 28 |. {..|errmesg(|
|00003640| 22 73 70 5f 63 6f 6d 70 | 61 63 74 28 29 22 29 3b |"sp_comp|act()");|
|00003650| 0a 09 70 72 69 6e 74 66 | 28 22 23 20 45 72 72 6f |..printf|("# Erro|
|00003660| 72 20 69 6e 20 41 2e 78 | 20 28 69 6e 66 20 6e 6f |r in A.x| (inf no|
|00003670| 72 6d 29 20 3d 20 25 67 | 20 5b 63 66 20 4d 41 43 |rm) = %g| [cf MAC|
|00003680| 48 45 50 53 20 3d 20 25 | 67 5d 5c 6e 22 2c 0a 09 |HEPS = %|g]\n",..|
|00003690| 20 20 20 20 20 20 20 76 | 5f 6e 6f 72 6d 5f 69 6e | v|_norm_in|
|000036a0| 66 28 7a 29 2c 20 4d 41 | 43 48 45 50 53 29 3b 0a |f(z), MA|CHEPS);.|
|000036b0| 20 20 20 20 7d 0a 20 20 | 20 20 66 6f 72 20 28 20 | }. | for ( |
|000036c0| 69 20 3d 20 30 3b 20 69 | 20 3c 20 42 2d 3e 6d 3b |i = 0; i| < B->m;|
|000036d0| 20 69 2b 2b 20 29 0a 20 | 20 20 20 7b 0a 09 72 20 | i++ ). | {..r |
|000036e0| 3d 20 26 28 42 2d 3e 72 | 6f 77 5b 69 5d 29 3b 0a |= &(B->r|ow[i]);.|
|000036f0| 09 66 6f 72 20 28 20 6a | 20 3d 20 30 3b 20 6a 20 |.for ( j| = 0; j |
|00003700| 3c 20 72 2d 3e 6c 65 6e | 3b 20 6a 2b 2b 20 29 0a |< r->len|; j++ ).|
|00003710| 09 20 20 20 20 69 66 20 | 28 20 72 2d 3e 65 6c 74 |. if |( r->elt|
|00003720| 5b 6a 5d 2e 76 61 6c 20 | 3d 3d 20 30 2e 30 20 29 |[j].val |== 0.0 )|
|00003730| 0a 09 09 62 72 65 61 6b | 3b 0a 20 20 20 20 7d 0a |...break|;. }.|
|00003740| 20 20 20 20 69 66 20 28 | 20 69 20 3c 20 42 2d 3e | if (| i < B->|
|00003750| 6d 20 29 0a 20 20 20 20 | 7b 0a 09 65 72 72 6d 65 |m ). |{..errme|
|00003760| 73 67 28 22 73 70 5f 63 | 6f 6d 70 61 63 74 28 29 |sg("sp_c|ompact()|
|00003770| 22 29 3b 0a 09 70 72 69 | 6e 74 66 28 22 23 20 5a |");..pri|ntf("# Z|
|00003780| 65 72 6f 20 65 6e 74 72 | 79 20 69 6e 20 63 6f 6d |ero entr|y in com|
|00003790| 70 61 63 74 65 64 20 6d | 61 74 72 69 78 5c 6e 22 |pacted m|atrix\n"|
|000037a0| 29 3b 0a 20 20 20 20 7d | 0a 0a 20 20 20 20 2f 2a |);. }|.. /*|
|000037b0| 20 63 68 65 63 6b 20 63 | 6f 6c 75 6d 6e 20 61 63 | check c|olumn ac|
|000037c0| 63 65 73 73 20 70 61 74 | 68 73 20 2a 2f 0a 20 20 |cess pat|hs */. |
|000037d0| 20 20 6e 6f 74 69 63 65 | 28 22 72 65 73 69 7a 69 | notice|("resizi|
|000037e0| 6e 67 20 61 6e 64 20 61 | 63 63 65 73 73 20 70 61 |ng and a|ccess pa|
|000037f0| 74 68 73 22 29 3b 0a 20 | 20 20 20 6d 5f 6f 6c 64 |ths");. | m_old|
|00003800| 20 3d 20 41 2d 3e 6d 2d | 31 3b 0a 20 20 20 20 6e | = A->m-|1;. n|
|00003810| 5f 6f 6c 64 20 3d 20 41 | 2d 3e 6e 2d 31 3b 0a 20 |_old = A|->n-1;. |
|00003820| 20 20 20 41 20 3d 20 73 | 70 5f 72 65 73 69 7a 65 | A = s|p_resize|
|00003830| 28 41 2c 41 2d 3e 6d 2b | 31 30 2c 41 2d 3e 6e 2b |(A,A->m+|10,A->n+|
|00003840| 31 30 29 3b 0a 20 20 20 | 20 66 6f 72 20 28 20 6b |10);. | for ( k|
|00003850| 20 3d 20 30 20 3b 20 6b | 20 3c 20 32 30 3b 20 6b | = 0 ; k| < 20; k|
|00003860| 2b 2b 20 29 0a 20 20 20 | 20 7b 0a 09 69 20 3d 20 |++ ). | {..i = |
|00003870| 6d 5f 6f 6c 64 20 2b 20 | 28 28 72 61 6e 64 28 29 |m_old + |((rand()|
|00003880| 20 3e 3e 20 38 29 20 25 | 20 31 30 29 3b 0a 09 6a | >> 8) %| 10);..j|
|00003890| 20 3d 20 6e 5f 6f 6c 64 | 20 2b 20 28 28 72 61 6e | = n_old| + ((ran|
|000038a0| 64 28 29 20 3e 3e 20 38 | 29 20 25 20 31 30 29 3b |d() >> 8|) % 10);|
|000038b0| 0a 09 73 31 20 3d 20 72 | 61 6e 64 28 29 2f 28 28 |..s1 = r|and()/((|
|000038c0| 52 65 61 6c 29 4d 41 58 | 5f 52 41 4e 44 29 3b 0a |Real)MAX|_RAND);.|
|000038d0| 09 73 70 5f 73 65 74 5f | 76 61 6c 28 41 2c 69 2c |.sp_set_|val(A,i,|
|000038e0| 6a 2c 73 31 29 3b 0a 09 | 69 66 20 28 20 66 61 62 |j,s1);..|if ( fab|
|000038f0| 73 28 73 31 20 2d 20 73 | 70 5f 67 65 74 5f 76 61 |s(s1 - s|p_get_va|
|00003900| 6c 28 41 2c 69 2c 6a 29 | 29 20 3e 3d 20 4d 41 43 |l(A,i,j)|) >= MAC|
|00003910| 48 45 50 53 20 29 0a 09 | 20 20 20 20 62 72 65 61 |HEPS )..| brea|
|00003920| 6b 3b 0a 20 20 20 20 7d | 0a 20 20 20 20 69 66 20 |k;. }|. if |
|00003930| 28 20 6b 20 3c 20 32 30 | 20 29 0a 09 65 72 72 6d |( k < 20| )..errm|
|00003940| 65 73 67 28 22 73 70 5f | 72 65 73 69 7a 65 28 29 |esg("sp_|resize()|
|00003950| 22 29 3b 0a 20 20 20 20 | 73 70 5f 63 6f 6c 5f 61 |");. |sp_col_a|
|00003960| 63 63 65 73 73 28 41 29 | 3b 0a 20 20 20 20 69 66 |ccess(A)|;. if|
|00003970| 20 28 20 21 20 63 68 6b | 5f 63 6f 6c 5f 61 63 63 | ( ! chk|_col_acc|
|00003980| 65 73 73 28 41 29 20 29 | 0a 20 20 20 20 7b 0a 09 |ess(A) )|. {..|
|00003990| 65 72 72 6d 65 73 67 28 | 22 73 70 5f 63 6f 6c 5f |errmesg(|"sp_col_|
|000039a0| 61 63 63 65 73 73 28 29 | 22 29 3b 0a 20 20 20 20 |access()|");. |
|000039b0| 7d 0a 20 20 20 20 73 70 | 5f 64 69 61 67 5f 61 63 |}. sp|_diag_ac|
|000039c0| 63 65 73 73 28 41 29 3b | 0a 20 20 20 20 66 6f 72 |cess(A);|. for|
|000039d0| 20 28 20 69 20 3d 20 30 | 3b 20 69 20 3c 20 41 2d | ( i = 0|; i < A-|
|000039e0| 3e 6d 3b 20 69 2b 2b 20 | 29 0a 20 20 20 20 7b 0a |>m; i++ |). {.|
|000039f0| 09 72 20 3d 20 26 28 41 | 2d 3e 72 6f 77 5b 69 5d |.r = &(A|->row[i]|
|00003a00| 29 3b 0a 09 69 66 20 28 | 20 72 2d 3e 64 69 61 67 |);..if (| r->diag|
|00003a10| 20 21 3d 20 73 70 72 6f | 77 5f 69 64 78 28 72 2c | != spro|w_idx(r,|
|00003a20| 69 29 20 29 0a 09 20 20 | 20 20 62 72 65 61 6b 3b |i) ).. | break;|
|00003a30| 0a 20 20 20 20 7d 0a 20 | 20 20 20 69 66 20 28 20 |. }. | if ( |
|00003a40| 69 20 3c 20 41 2d 3e 6d | 20 29 0a 20 20 20 20 7b |i < A->m| ). {|
|00003a50| 0a 09 65 72 72 6d 65 73 | 67 28 22 73 70 5f 64 69 |..errmes|g("sp_di|
|00003a60| 61 67 5f 61 63 63 65 73 | 73 28 29 22 29 3b 0a 20 |ag_acces|s()");. |
|00003a70| 20 20 20 7d 0a 0a 20 20 | 20 20 2f 2a 20 74 65 73 | }.. | /* tes|
|00003a80| 74 20 62 6f 74 68 20 73 | 70 5f 6d 76 5f 6d 6c 74 |t both s|p_mv_mlt|
|00003a90| 28 29 20 61 6e 64 20 73 | 70 5f 76 6d 5f 6d 6c 74 |() and s|p_vm_mlt|
|00003aa0| 28 29 20 2a 2f 0a 20 20 | 20 20 78 20 3d 20 76 5f |() */. | x = v_|
|00003ab0| 72 65 73 69 7a 65 28 78 | 2c 42 2d 3e 6e 29 3b 0a |resize(x|,B->n);.|
|00003ac0| 20 20 20 20 79 20 3d 20 | 76 5f 72 65 73 69 7a 65 | y = |v_resize|
|00003ad0| 28 79 2c 42 2d 3e 6d 29 | 3b 0a 20 20 20 20 75 20 |(y,B->m)|;. u |
|00003ae0| 3d 20 76 5f 67 65 74 28 | 42 2d 3e 6d 29 3b 0a 20 |= v_get(|B->m);. |
|00003af0| 20 20 20 76 20 3d 20 76 | 5f 67 65 74 28 42 2d 3e | v = v|_get(B->|
|00003b00| 6e 29 3b 0a 20 20 20 20 | 66 6f 72 20 28 20 6b 20 |n);. |for ( k |
|00003b10| 3d 20 30 3b 20 6b 20 3c | 20 31 30 3b 20 6b 2b 2b |= 0; k <| 10; k++|
|00003b20| 20 29 0a 20 20 20 20 7b | 0a 09 76 5f 72 61 6e 64 | ). {|..v_rand|
|00003b30| 28 78 29 3b 0a 09 76 5f | 72 61 6e 64 28 79 29 3b |(x);..v_|rand(y);|
|00003b40| 0a 09 73 70 5f 6d 76 5f | 6d 6c 74 28 42 2c 78 2c |..sp_mv_|mlt(B,x,|
|00003b50| 75 29 3b 0a 09 73 70 5f | 76 6d 5f 6d 6c 74 28 42 |u);..sp_|vm_mlt(B|
|00003b60| 2c 79 2c 76 29 3b 0a 09 | 69 66 20 28 20 66 61 62 |,y,v);..|if ( fab|
|00003b70| 73 28 69 6e 5f 70 72 6f | 64 28 78 2c 76 29 20 2d |s(in_pro|d(x,v) -|
|00003b80| 20 69 6e 5f 70 72 6f 64 | 28 79 2c 75 29 29 20 3e | in_prod|(y,u)) >|
|00003b90| 3d 0a 09 20 20 20 20 4d | 41 43 48 45 50 53 2a 76 |=.. M|ACHEPS*v|
|00003ba0| 5f 6e 6f 72 6d 32 28 78 | 29 2a 76 5f 6e 6f 72 6d |_norm2(x|)*v_norm|
|00003bb0| 32 28 75 29 2a 35 20 29 | 0a 09 20 20 20 20 62 72 |2(u)*5 )|.. br|
|00003bc0| 65 61 6b 3b 0a 20 20 20 | 20 7d 0a 20 20 20 20 69 |eak;. | }. i|
|00003bd0| 66 20 28 20 6b 20 3c 20 | 31 30 20 29 0a 20 20 20 |f ( k < |10 ). |
|00003be0| 20 7b 0a 09 65 72 72 6d | 65 73 67 28 22 73 70 5f | {..errm|esg("sp_|
|00003bf0| 6d 76 5f 6d 6c 74 28 29 | 2f 73 70 5f 76 6d 5f 6d |mv_mlt()|/sp_vm_m|
|00003c00| 6c 74 28 29 22 29 3b 0a | 09 70 72 69 6e 74 66 28 |lt()");.|.printf(|
|00003c10| 22 23 20 45 72 72 6f 72 | 20 69 6e 20 69 6e 6e 65 |"# Error| in inne|
|00003c20| 72 20 70 72 6f 64 75 63 | 74 73 20 3d 20 25 67 20 |r produc|ts = %g |
|00003c30| 5b 63 66 20 4d 41 43 48 | 45 50 53 20 3d 20 25 67 |[cf MACH|EPS = %g|
|00003c40| 5d 5c 6e 22 2c 0a 09 20 | 20 20 20 20 20 20 66 61 |]\n",.. | fa|
|00003c50| 62 73 28 69 6e 5f 70 72 | 6f 64 28 78 2c 76 29 20 |bs(in_pr|od(x,v) |
|00003c60| 2d 20 69 6e 5f 70 72 6f | 64 28 79 2c 75 29 29 2c |- in_pro|d(y,u)),|
|00003c70| 20 4d 41 43 48 45 50 53 | 29 3b 0a 20 20 20 20 7d | MACHEPS|);. }|
|00003c80| 0a 0a 20 20 20 20 53 50 | 5f 46 52 45 45 28 41 29 |.. SP|_FREE(A)|
|00003c90| 3b 0a 20 20 20 20 53 50 | 5f 46 52 45 45 28 42 29 |;. SP|_FREE(B)|
|00003ca0| 3b 0a 20 20 20 20 53 50 | 5f 46 52 45 45 28 43 29 |;. SP|_FREE(C)|
|00003cb0| 3b 0a 0a 20 20 20 20 2f | 2a 20 6e 6f 77 20 74 65 |;.. /|* now te|
|00003cc0| 73 74 20 43 68 6f 6c 65 | 73 6b 79 20 61 6e 64 20 |st Chole|sky and |
|00003cd0| 4c 55 20 66 61 63 74 6f | 72 69 73 65 20 61 6e 64 |LU facto|rise and|
|00003ce0| 20 73 6f 6c 76 65 20 2a | 2f 0a 20 20 20 20 6e 6f | solve *|/. no|
|00003cf0| 74 69 63 65 28 22 73 70 | 61 72 73 65 20 43 68 6f |tice("sp|arse Cho|
|00003d00| 6c 65 73 6b 79 20 66 61 | 63 74 6f 72 69 73 65 2f |lesky fa|ctorise/|
|00003d10| 73 6f 6c 76 65 22 29 3b | 0a 20 20 20 20 41 20 3d |solve");|. A =|
|00003d20| 20 69 74 65 72 5f 67 65 | 6e 5f 73 79 6d 28 31 32 | iter_ge|n_sym(12|
|00003d30| 30 2c 38 29 3b 0a 20 20 | 20 20 42 20 3d 20 73 70 |0,8);. | B = sp|
|00003d40| 5f 63 6f 70 79 28 41 29 | 3b 0a 20 20 20 20 73 70 |_copy(A)|;. sp|
|00003d50| 43 48 66 61 63 74 6f 72 | 28 41 29 3b 0a 20 20 20 |CHfactor|(A);. |
|00003d60| 20 78 20 3d 20 76 5f 72 | 65 73 69 7a 65 28 78 2c | x = v_r|esize(x,|
|00003d70| 41 2d 3e 6d 29 3b 0a 20 | 20 20 20 79 20 3d 20 76 |A->m);. | y = v|
|00003d80| 5f 72 65 73 69 7a 65 28 | 79 2c 41 2d 3e 6d 29 3b |_resize(|y,A->m);|
|00003d90| 0a 20 20 20 20 76 5f 72 | 61 6e 64 28 78 29 3b 0a |. v_r|and(x);.|
|00003da0| 20 20 20 20 73 70 5f 6d | 76 5f 6d 6c 74 28 42 2c | sp_m|v_mlt(B,|
|00003db0| 78 2c 79 29 3b 0a 20 20 | 20 20 7a 20 3d 20 76 5f |x,y);. | z = v_|
|00003dc0| 72 65 73 69 7a 65 28 7a | 2c 41 2d 3e 6d 29 3b 0a |resize(z|,A->m);.|
|00003dd0| 20 20 20 20 73 70 43 48 | 73 6f 6c 76 65 28 41 2c | spCH|solve(A,|
|00003de0| 79 2c 7a 29 3b 0a 20 20 | 20 20 76 20 3d 20 76 5f |y,z);. | v = v_|
|00003df0| 72 65 73 69 7a 65 28 76 | 2c 41 2d 3e 6d 29 3b 0a |resize(v|,A->m);.|
|00003e00| 20 20 20 20 73 70 5f 6d | 76 5f 6d 6c 74 28 42 2c | sp_m|v_mlt(B,|
|00003e10| 7a 2c 76 29 3b 0a 20 20 | 20 20 2f 2a 20 63 6f 6d |z,v);. | /* com|
|00003e20| 70 75 74 65 20 72 65 73 | 69 64 75 61 6c 20 2a 2f |pute res|idual */|
|00003e30| 0a 20 20 20 20 76 5f 73 | 75 62 28 79 2c 76 2c 76 |. v_s|ub(y,v,v|
|00003e40| 29 3b 0a 20 20 20 20 69 | 66 20 28 20 76 5f 6e 6f |);. i|f ( v_no|
|00003e50| 72 6d 32 28 76 29 20 3e | 3d 20 4d 41 43 48 45 50 |rm2(v) >|= MACHEP|
|00003e60| 53 2a 76 5f 6e 6f 72 6d | 32 28 79 29 2a 31 30 20 |S*v_norm|2(y)*10 |
|00003e70| 29 0a 20 20 20 20 7b 0a | 09 65 72 72 6d 65 73 67 |). {.|.errmesg|
|00003e80| 28 22 73 70 43 48 66 61 | 63 74 6f 72 28 29 2f 73 |("spCHfa|ctor()/s|
|00003e90| 70 43 48 73 6f 6c 76 65 | 28 29 22 29 3b 0a 09 70 |pCHsolve|()");..p|
|00003ea0| 72 69 6e 74 66 28 22 23 | 20 53 70 61 72 73 65 20 |rintf("#| Sparse |
|00003eb0| 43 68 6f 6c 65 73 6b 79 | 20 72 65 73 69 64 75 61 |Cholesky| residua|
|00003ec0| 6c 20 3d 20 25 67 20 5b | 63 66 20 4d 41 43 48 45 |l = %g [|cf MACHE|
|00003ed0| 50 53 20 3d 20 25 67 5d | 5c 6e 22 2c 0a 09 20 20 |PS = %g]|\n",.. |
|00003ee0| 20 20 20 20 20 76 5f 6e | 6f 72 6d 32 28 76 29 2c | v_n|orm2(v),|
|00003ef0| 20 4d 41 43 48 45 50 53 | 29 3b 0a 20 20 20 20 7d | MACHEPS|);. }|
|00003f00| 0a 20 20 20 20 2f 2a 20 | 63 6f 6d 70 75 74 65 20 |. /* |compute |
|00003f10| 65 72 72 6f 72 20 69 6e | 20 73 6f 6c 75 74 69 6f |error in| solutio|
|00003f20| 6e 20 2a 2f 0a 20 20 20 | 20 76 5f 73 75 62 28 78 |n */. | v_sub(x|
|00003f30| 2c 7a 2c 7a 29 3b 0a 20 | 20 20 20 69 66 20 28 20 |,z,z);. | if ( |
|00003f40| 76 5f 6e 6f 72 6d 32 28 | 7a 29 20 3e 20 4d 41 43 |v_norm2(|z) > MAC|
|00003f50| 48 45 50 53 2a 76 5f 6e | 6f 72 6d 32 28 78 29 2a |HEPS*v_n|orm2(x)*|
|00003f60| 31 30 20 29 0a 20 20 20 | 20 7b 0a 09 65 72 72 6d |10 ). | {..errm|
|00003f70| 65 73 67 28 22 73 70 43 | 48 66 61 63 74 6f 72 28 |esg("spC|Hfactor(|
|00003f80| 29 2f 73 70 43 48 73 6f | 6c 76 65 28 29 22 29 3b |)/spCHso|lve()");|
|00003f90| 0a 09 70 72 69 6e 74 66 | 28 22 23 20 53 6f 6c 75 |..printf|("# Solu|
|00003fa0| 74 69 6f 6e 20 65 72 72 | 6f 72 20 3d 20 25 67 20 |tion err|or = %g |
|00003fb0| 5b 63 66 20 4d 41 43 48 | 45 50 53 20 3d 20 25 67 |[cf MACH|EPS = %g|
|00003fc0| 5d 5c 6e 22 2c 0a 09 20 | 20 20 20 20 20 20 76 5f |]\n",.. | v_|
|00003fd0| 6e 6f 72 6d 32 28 7a 29 | 2c 20 4d 41 43 48 45 50 |norm2(z)|, MACHEP|
|00003fe0| 53 29 3b 0a 20 20 20 20 | 7d 0a 0a 20 20 20 20 2f |S);. |}.. /|
|00003ff0| 2a 20 6e 6f 77 20 74 65 | 73 74 20 73 79 6d 62 6f |* now te|st symbo|
|00004000| 6c 69 63 20 61 6e 64 20 | 69 6e 63 6f 6d 70 6c 65 |lic and |incomple|
|00004010| 74 65 20 66 61 63 74 6f | 72 69 73 61 74 69 6f 6e |te facto|risation|
|00004020| 20 2a 2f 0a 20 20 20 20 | 53 50 5f 46 52 45 45 28 | */. |SP_FREE(|
|00004030| 41 29 3b 0a 20 20 20 20 | 41 20 3d 20 73 70 5f 63 |A);. |A = sp_c|
|00004040| 6f 70 79 28 42 29 3b 0a | 20 20 20 20 0a 20 20 20 |opy(B);.| . |
|00004050| 20 6d 65 6d 5f 73 74 61 | 74 5f 6d 61 72 6b 28 32 | mem_sta|t_mark(2|
|00004060| 29 3b 0a 20 20 20 20 73 | 70 43 48 73 79 6d 62 28 |);. s|pCHsymb(|
|00004070| 41 29 3b 0a 20 20 20 20 | 6d 65 6d 5f 73 74 61 74 |A);. |mem_stat|
|00004080| 5f 6d 61 72 6b 28 32 29 | 3b 0a 0a 20 20 20 20 73 |_mark(2)|;.. s|
|00004090| 70 49 43 48 66 61 63 74 | 6f 72 28 41 29 3b 0a 20 |pICHfact|or(A);. |
|000040a0| 20 20 20 73 70 43 48 73 | 6f 6c 76 65 28 41 2c 79 | spCHs|olve(A,y|
|000040b0| 2c 7a 29 3b 0a 20 20 20 | 20 76 20 3d 20 76 5f 72 |,z);. | v = v_r|
|000040c0| 65 73 69 7a 65 28 76 2c | 41 2d 3e 6d 29 3b 0a 20 |esize(v,|A->m);. |
|000040d0| 20 20 20 73 70 5f 6d 76 | 5f 6d 6c 74 28 42 2c 7a | sp_mv|_mlt(B,z|
|000040e0| 2c 76 29 3b 0a 20 20 20 | 20 2f 2a 20 63 6f 6d 70 |,v);. | /* comp|
|000040f0| 75 74 65 20 72 65 73 69 | 64 75 61 6c 20 2a 2f 0a |ute resi|dual */.|
|00004100| 20 20 20 20 76 5f 73 75 | 62 28 79 2c 76 2c 76 29 | v_su|b(y,v,v)|
|00004110| 3b 0a 20 20 20 20 69 66 | 20 28 20 76 5f 6e 6f 72 |;. if| ( v_nor|
|00004120| 6d 32 28 76 29 20 3e 3d | 20 4d 41 43 48 45 50 53 |m2(v) >=| MACHEPS|
|00004130| 2a 76 5f 6e 6f 72 6d 32 | 28 79 29 2a 35 20 29 0a |*v_norm2|(y)*5 ).|
|00004140| 20 20 20 20 7b 0a 09 65 | 72 72 6d 65 73 67 28 22 | {..e|rrmesg("|
|00004150| 73 70 43 48 73 79 6d 62 | 28 29 2f 73 70 49 43 48 |spCHsymb|()/spICH|
|00004160| 66 61 63 74 6f 72 28 29 | 22 29 3b 0a 09 70 72 69 |factor()|");..pri|
|00004170| 6e 74 66 28 22 23 20 53 | 70 61 72 73 65 20 43 68 |ntf("# S|parse Ch|
|00004180| 6f 6c 65 73 6b 79 20 72 | 65 73 69 64 75 61 6c 20 |olesky r|esidual |
|00004190| 3d 20 25 67 20 5b 63 66 | 20 4d 41 43 48 45 50 53 |= %g [cf| MACHEPS|
|000041a0| 20 3d 20 25 67 5d 5c 6e | 22 2c 0a 09 20 20 20 20 | = %g]\n|",.. |
|000041b0| 20 20 20 76 5f 6e 6f 72 | 6d 32 28 76 29 2c 20 4d | v_nor|m2(v), M|
|000041c0| 41 43 48 45 50 53 29 3b | 0a 20 20 20 20 7d 0a 20 |ACHEPS);|. }. |
|000041d0| 20 20 20 2f 2a 20 63 6f | 6d 70 75 74 65 20 65 72 | /* co|mpute er|
|000041e0| 72 6f 72 20 69 6e 20 73 | 6f 6c 75 74 69 6f 6e 20 |ror in s|olution |
|000041f0| 2a 2f 0a 20 20 20 20 76 | 5f 73 75 62 28 78 2c 7a |*/. v|_sub(x,z|
|00004200| 2c 7a 29 3b 0a 20 20 20 | 20 69 66 20 28 20 76 5f |,z);. | if ( v_|
|00004210| 6e 6f 72 6d 32 28 7a 29 | 20 3e 20 4d 41 43 48 45 |norm2(z)| > MACHE|
|00004220| 50 53 2a 76 5f 6e 6f 72 | 6d 32 28 78 29 2a 31 30 |PS*v_nor|m2(x)*10|
|00004230| 20 29 0a 20 20 20 20 7b | 0a 09 65 72 72 6d 65 73 | ). {|..errmes|
|00004240| 67 28 22 73 70 43 48 73 | 79 6d 62 28 29 2f 73 70 |g("spCHs|ymb()/sp|
|00004250| 49 43 48 66 61 63 74 6f | 72 28 29 22 29 3b 0a 09 |ICHfacto|r()");..|
|00004260| 70 72 69 6e 74 66 28 22 | 23 20 53 6f 6c 75 74 69 |printf("|# Soluti|
|00004270| 6f 6e 20 65 72 72 6f 72 | 20 3d 20 25 67 20 5b 63 |on error| = %g [c|
|00004280| 66 20 4d 41 43 48 45 50 | 53 20 3d 20 25 67 5d 5c |f MACHEP|S = %g]\|
|00004290| 6e 22 2c 0a 09 20 20 20 | 20 20 20 20 76 5f 6e 6f |n",.. | v_no|
|000042a0| 72 6d 32 28 7a 29 2c 20 | 4d 41 43 48 45 50 53 29 |rm2(z), |MACHEPS)|
|000042b0| 3b 0a 20 20 20 20 7d 0a | 0a 20 20 20 20 2f 2a 20 |;. }.|. /* |
|000042c0| 6e 6f 77 20 74 65 73 74 | 20 73 70 61 72 73 65 20 |now test| sparse |
|000042d0| 4c 55 20 66 61 63 74 6f | 72 69 73 61 74 69 6f 6e |LU facto|risation|
|000042e0| 20 2a 2f 0a 20 20 20 20 | 6e 6f 74 69 63 65 28 22 | */. |notice("|
|000042f0| 73 70 61 72 73 65 20 4c | 55 20 66 61 63 74 6f 72 |sparse L|U factor|
|00004300| 69 73 65 2f 73 6f 6c 76 | 65 22 29 3b 0a 20 20 20 |ise/solv|e");. |
|00004310| 20 53 50 5f 46 52 45 45 | 28 41 29 3b 0a 20 20 20 | SP_FREE|(A);. |
|00004320| 20 53 50 5f 46 52 45 45 | 28 42 29 3b 0a 20 20 20 | SP_FREE|(B);. |
|00004330| 20 41 20 3d 20 69 74 65 | 72 5f 67 65 6e 5f 6e 6f | A = ite|r_gen_no|
|00004340| 6e 73 79 6d 28 31 30 30 | 2c 31 30 30 2c 38 2c 31 |nsym(100|,100,8,1|
|00004350| 2e 30 29 3b 0a 0a 20 20 | 20 20 42 20 3d 20 73 70 |.0);.. | B = sp|
|00004360| 5f 63 6f 70 79 28 41 29 | 3b 0a 20 20 20 20 78 20 |_copy(A)|;. x |
|00004370| 3d 20 76 5f 72 65 73 69 | 7a 65 28 78 2c 41 2d 3e |= v_resi|ze(x,A->|
|00004380| 6e 29 3b 0a 20 20 20 20 | 7a 20 3d 20 76 5f 72 65 |n);. |z = v_re|
|00004390| 73 69 7a 65 28 7a 2c 41 | 2d 3e 6e 29 3b 0a 20 20 |size(z,A|->n);. |
|000043a0| 20 20 79 20 3d 20 76 5f | 72 65 73 69 7a 65 28 79 | y = v_|resize(y|
|000043b0| 2c 41 2d 3e 6d 29 3b 0a | 20 20 20 20 76 20 3d 20 |,A->m);.| v = |
|000043c0| 76 5f 72 65 73 69 7a 65 | 28 76 2c 41 2d 3e 6d 29 |v_resize|(v,A->m)|
|000043d0| 3b 0a 0a 20 20 20 20 76 | 5f 72 61 6e 64 28 78 29 |;.. v|_rand(x)|
|000043e0| 3b 0a 20 20 20 20 73 70 | 5f 6d 76 5f 6d 6c 74 28 |;. sp|_mv_mlt(|
|000043f0| 42 2c 78 2c 79 29 3b 0a | 20 20 20 20 70 69 76 6f |B,x,y);.| pivo|
|00004400| 74 20 3d 20 70 78 5f 67 | 65 74 28 41 2d 3e 6d 29 |t = px_g|et(A->m)|
|00004410| 3b 0a 0a 20 20 20 20 6d | 65 6d 5f 73 74 61 74 5f |;.. m|em_stat_|
|00004420| 6d 61 72 6b 28 33 29 3b | 0a 20 20 20 20 73 70 4c |mark(3);|. spL|
|00004430| 55 66 61 63 74 6f 72 28 | 41 2c 70 69 76 6f 74 2c |Ufactor(|A,pivot,|
|00004440| 30 2e 31 29 3b 0a 20 20 | 20 20 73 70 4c 55 73 6f |0.1);. | spLUso|
|00004450| 6c 76 65 28 41 2c 70 69 | 76 6f 74 2c 79 2c 7a 29 |lve(A,pi|vot,y,z)|
|00004460| 3b 0a 20 20 20 20 6d 65 | 6d 5f 73 74 61 74 5f 66 |;. me|m_stat_f|
|00004470| 72 65 65 28 33 29 3b 0a | 20 20 20 20 73 70 5f 6d |ree(3);.| sp_m|
|00004480| 76 5f 6d 6c 74 28 42 2c | 7a 2c 76 29 3b 0a 0a 20 |v_mlt(B,|z,v);.. |
|00004490| 20 20 20 2f 2a 20 63 6f | 6d 70 75 74 65 20 72 65 | /* co|mpute re|
|000044a0| 73 69 64 75 61 6c 20 2a | 2f 0a 20 20 20 20 76 5f |sidual *|/. v_|
|000044b0| 73 75 62 28 79 2c 76 2c | 76 29 3b 0a 20 20 20 20 |sub(y,v,|v);. |
|000044c0| 69 66 20 28 20 76 5f 6e | 6f 72 6d 32 28 76 29 20 |if ( v_n|orm2(v) |
|000044d0| 3e 3d 20 4d 41 43 48 45 | 50 53 2a 76 5f 6e 6f 72 |>= MACHE|PS*v_nor|
|000044e0| 6d 32 28 79 29 2a 41 2d | 3e 6d 20 29 0a 20 20 20 |m2(y)*A-|>m ). |
|000044f0| 20 7b 0a 09 65 72 72 6d | 65 73 67 28 22 73 70 4c | {..errm|esg("spL|
|00004500| 55 66 61 63 74 6f 72 28 | 29 2f 73 70 4c 55 73 6f |Ufactor(|)/spLUso|
|00004510| 6c 76 65 28 29 22 29 3b | 0a 09 70 72 69 6e 74 66 |lve()");|..printf|
|00004520| 28 22 23 20 53 70 61 72 | 73 65 20 4c 55 20 72 65 |("# Spar|se LU re|
|00004530| 73 69 64 75 61 6c 20 3d | 20 25 67 20 5b 63 66 20 |sidual =| %g [cf |
|00004540| 4d 41 43 48 45 50 53 20 | 3d 20 25 67 5d 5c 6e 22 |MACHEPS |= %g]\n"|
|00004550| 2c 0a 09 20 20 20 20 20 | 20 20 76 5f 6e 6f 72 6d |,.. | v_norm|
|00004560| 32 28 76 29 2c 20 4d 41 | 43 48 45 50 53 29 3b 0a |2(v), MA|CHEPS);.|
|00004570| 20 20 20 20 7d 0a 20 20 | 20 20 2f 2a 20 63 6f 6d | }. | /* com|
|00004580| 70 75 74 65 20 65 72 72 | 6f 72 20 69 6e 20 73 6f |pute err|or in so|
|00004590| 6c 75 74 69 6f 6e 20 2a | 2f 0a 20 20 20 20 76 5f |lution *|/. v_|
|000045a0| 73 75 62 28 78 2c 7a 2c | 7a 29 3b 0a 20 20 20 20 |sub(x,z,|z);. |
|000045b0| 69 66 20 28 20 76 5f 6e | 6f 72 6d 32 28 7a 29 20 |if ( v_n|orm2(z) |
|000045c0| 3e 20 4d 41 43 48 45 50 | 53 2a 76 5f 6e 6f 72 6d |> MACHEP|S*v_norm|
|000045d0| 32 28 78 29 2a 31 30 30 | 2a 41 2d 3e 6d 20 29 0a |2(x)*100|*A->m ).|
|000045e0| 20 20 20 20 7b 0a 09 65 | 72 72 6d 65 73 67 28 22 | {..e|rrmesg("|
|000045f0| 73 70 4c 55 66 61 63 74 | 6f 72 28 29 2f 73 70 4c |spLUfact|or()/spL|
|00004600| 55 73 6f 6c 76 65 28 29 | 22 29 3b 0a 09 70 72 69 |Usolve()|");..pri|
|00004610| 6e 74 66 28 22 23 20 53 | 70 61 72 73 65 20 4c 55 |ntf("# S|parse LU|
|00004620| 20 73 6f 6c 75 74 69 6f | 6e 20 65 72 72 6f 72 20 | solutio|n error |
|00004630| 3d 20 25 67 20 5b 63 66 | 20 4d 41 43 48 45 50 53 |= %g [cf| MACHEPS|
|00004640| 20 3d 20 25 67 5d 5c 6e | 22 2c 0a 09 20 20 20 20 | = %g]\n|",.. |
|00004650| 20 20 20 76 5f 6e 6f 72 | 6d 32 28 7a 29 2c 20 4d | v_nor|m2(z), M|
|00004660| 41 43 48 45 50 53 29 3b | 0a 20 20 20 20 7d 0a 0a |ACHEPS);|. }..|
|00004670| 20 20 20 20 2f 2a 20 6e | 6f 77 20 63 68 65 63 6b | /* n|ow check|
|00004680| 20 73 70 4c 55 54 73 6f | 6c 76 65 20 2a 2f 0a 20 | spLUTso|lve */. |
|00004690| 20 20 20 6d 65 6d 5f 73 | 74 61 74 5f 6d 61 72 6b | mem_s|tat_mark|
|000046a0| 28 34 29 3b 0a 20 20 20 | 20 73 70 5f 76 6d 5f 6d |(4);. | sp_vm_m|
|000046b0| 6c 74 28 42 2c 78 2c 79 | 29 3b 0a 20 20 20 20 73 |lt(B,x,y|);. s|
|000046c0| 70 4c 55 54 73 6f 6c 76 | 65 28 41 2c 70 69 76 6f |pLUTsolv|e(A,pivo|
|000046d0| 74 2c 79 2c 7a 29 3b 0a | 20 20 20 20 73 70 5f 76 |t,y,z);.| sp_v|
|000046e0| 6d 5f 6d 6c 74 28 42 2c | 7a 2c 76 29 3b 0a 20 20 |m_mlt(B,|z,v);. |
|000046f0| 20 20 6d 65 6d 5f 73 74 | 61 74 5f 66 72 65 65 28 | mem_st|at_free(|
|00004700| 34 29 3b 0a 0a 20 20 20 | 20 2f 2a 20 63 6f 6d 70 |4);.. | /* comp|
|00004710| 75 74 65 20 72 65 73 69 | 64 75 61 6c 20 2a 2f 0a |ute resi|dual */.|
|00004720| 20 20 20 20 76 5f 73 75 | 62 28 79 2c 76 2c 76 29 | v_su|b(y,v,v)|
|00004730| 3b 0a 20 20 20 20 69 66 | 20 28 20 76 5f 6e 6f 72 |;. if| ( v_nor|
|00004740| 6d 32 28 76 29 20 3e 3d | 20 4d 41 43 48 45 50 53 |m2(v) >=| MACHEPS|
|00004750| 2a 76 5f 6e 6f 72 6d 32 | 28 79 29 2a 41 2d 3e 6d |*v_norm2|(y)*A->m|
|00004760| 20 29 0a 20 20 20 20 7b | 0a 09 65 72 72 6d 65 73 | ). {|..errmes|
|00004770| 67 28 22 73 70 4c 55 54 | 73 6f 6c 76 65 28 29 22 |g("spLUT|solve()"|
|00004780| 29 3b 0a 09 70 72 69 6e | 74 66 28 22 23 20 53 70 |);..prin|tf("# Sp|
|00004790| 61 72 73 65 20 4c 55 20 | 72 65 73 69 64 75 61 6c |arse LU |residual|
|000047a0| 20 3d 20 25 67 20 5b 63 | 66 20 4d 41 43 48 45 50 | = %g [c|f MACHEP|
|000047b0| 53 20 3d 20 25 67 5d 5c | 6e 22 2c 0a 09 20 20 20 |S = %g]\|n",.. |
|000047c0| 20 20 20 20 76 5f 6e 6f | 72 6d 32 28 76 29 2c 20 | v_no|rm2(v), |
|000047d0| 4d 41 43 48 45 50 53 29 | 3b 0a 20 20 20 20 7d 0a |MACHEPS)|;. }.|
|000047e0| 20 20 20 20 2f 2a 20 63 | 6f 6d 70 75 74 65 20 65 | /* c|ompute e|
|000047f0| 72 72 6f 72 20 69 6e 20 | 73 6f 6c 75 74 69 6f 6e |rror in |solution|
|00004800| 20 2a 2f 0a 20 20 20 20 | 76 5f 73 75 62 28 78 2c | */. |v_sub(x,|
|00004810| 7a 2c 7a 29 3b 0a 20 20 | 20 20 69 66 20 28 20 76 |z,z);. | if ( v|
|00004820| 5f 6e 6f 72 6d 32 28 7a | 29 20 3e 20 4d 41 43 48 |_norm2(z|) > MACH|
|00004830| 45 50 53 2a 76 5f 6e 6f | 72 6d 32 28 78 29 2a 31 |EPS*v_no|rm2(x)*1|
|00004840| 30 30 2a 41 2d 3e 6d 20 | 29 0a 20 20 20 20 7b 0a |00*A->m |). {.|
|00004850| 09 65 72 72 6d 65 73 67 | 28 22 73 70 4c 55 54 73 |.errmesg|("spLUTs|
|00004860| 6f 6c 76 65 28 29 22 29 | 3b 0a 09 70 72 69 6e 74 |olve()")|;..print|
|00004870| 66 28 22 23 20 53 70 61 | 72 73 65 20 4c 55 20 73 |f("# Spa|rse LU s|
|00004880| 6f 6c 75 74 69 6f 6e 20 | 65 72 72 6f 72 20 3d 20 |olution |error = |
|00004890| 25 67 20 5b 63 66 20 4d | 41 43 48 45 50 53 20 3d |%g [cf M|ACHEPS =|
|000048a0| 20 25 67 5d 5c 6e 22 2c | 0a 09 20 20 20 20 20 20 | %g]\n",|.. |
|000048b0| 20 76 5f 6e 6f 72 6d 32 | 28 7a 29 2c 20 4d 41 43 | v_norm2|(z), MAC|
|000048c0| 48 45 50 53 29 3b 0a 20 | 20 20 20 7d 0a 0a 20 20 |HEPS);. | }.. |
|000048d0| 20 20 2f 2a 20 61 6c 67 | 65 62 72 61 69 63 20 6f | /* alg|ebraic o|
|000048e0| 70 65 72 61 74 69 6f 6e | 73 20 2a 2f 0a 20 20 20 |peration|s */. |
|000048f0| 20 6e 6f 74 69 63 65 28 | 22 61 64 64 69 74 69 6f | notice(|"additio|
|00004900| 6e 2c 73 75 62 74 72 61 | 63 74 69 6f 6e 20 61 6e |n,subtra|ction an|
|00004910| 64 20 6d 75 6c 74 69 70 | 6c 79 69 6e 67 20 62 79 |d multip|lying by|
|00004920| 20 61 20 6e 75 6d 62 65 | 72 22 29 3b 0a 20 20 20 | a numbe|r");. |
|00004930| 20 53 50 5f 46 52 45 45 | 28 41 29 3b 0a 20 20 20 | SP_FREE|(A);. |
|00004940| 20 53 50 5f 46 52 45 45 | 28 42 29 3b 0a 0a 20 20 | SP_FREE|(B);.. |
|00004950| 20 20 6d 20 3d 20 31 32 | 30 3b 0a 20 20 20 20 6e | m = 12|0;. n|
|00004960| 20 3d 20 31 32 30 3b 0a | 20 20 20 20 64 65 67 20 | = 120;.| deg |
|00004970| 3d 20 35 3b 0a 20 20 20 | 20 41 20 3d 20 73 70 5f |= 5;. | A = sp_|
|00004980| 67 65 74 28 6d 2c 6e 2c | 64 65 67 29 3b 0a 20 20 |get(m,n,|deg);. |
|00004990| 20 20 42 20 3d 20 73 70 | 5f 67 65 74 28 6d 2c 6e | B = sp|_get(m,n|
|000049a0| 2c 64 65 67 29 3b 0a 20 | 20 20 20 43 20 3d 20 73 |,deg);. | C = s|
|000049b0| 70 5f 67 65 74 28 6d 2c | 6e 2c 64 65 67 29 3b 0a |p_get(m,|n,deg);.|
|000049c0| 20 20 20 20 43 31 20 3d | 20 73 70 5f 67 65 74 28 | C1 =| sp_get(|
|000049d0| 6d 2c 6e 2c 64 65 67 29 | 3b 0a 0a 20 20 20 20 66 |m,n,deg)|;.. f|
|000049e0| 6f 72 20 28 20 6b 20 3d | 20 30 3b 20 6b 20 3c 20 |or ( k =| 0; k < |
|000049f0| 6d 2a 64 65 67 3b 20 6b | 2b 2b 20 29 0a 20 20 20 |m*deg; k|++ ). |
|00004a00| 20 7b 0a 09 69 20 3d 20 | 28 72 61 6e 64 28 29 20 | {..i = |(rand() |
|00004a10| 3e 3e 20 38 29 20 25 20 | 6d 3b 0a 09 6a 20 3d 20 |>> 8) % |m;..j = |
|00004a20| 28 72 61 6e 64 28 29 20 | 3e 3e 20 38 29 20 25 20 |(rand() |>> 8) % |
|00004a30| 6e 3b 0a 09 73 70 5f 73 | 65 74 5f 76 61 6c 28 41 |n;..sp_s|et_val(A|
|00004a40| 2c 69 2c 6a 2c 72 61 6e | 64 28 29 2f 28 28 52 65 |,i,j,ran|d()/((Re|
|00004a50| 61 6c 29 4d 41 58 5f 52 | 41 4e 44 29 29 3b 0a 09 |al)MAX_R|AND));..|
|00004a60| 69 20 3d 20 28 72 61 6e | 64 28 29 20 3e 3e 20 38 |i = (ran|d() >> 8|
|00004a70| 29 20 25 20 6d 3b 0a 09 | 6a 20 3d 20 28 72 61 6e |) % m;..|j = (ran|
|00004a80| 64 28 29 20 3e 3e 20 38 | 29 20 25 20 6e 3b 0a 09 |d() >> 8|) % n;..|
|00004a90| 73 70 5f 73 65 74 5f 76 | 61 6c 28 42 2c 69 2c 6a |sp_set_v|al(B,i,j|
|00004aa0| 2c 72 61 6e 64 28 29 2f | 28 28 52 65 61 6c 29 4d |,rand()/|((Real)M|
|00004ab0| 41 58 5f 52 41 4e 44 29 | 29 3b 0a 20 20 20 20 7d |AX_RAND)|);. }|
|00004ac0| 0a 20 20 20 20 0a 20 20 | 20 20 73 31 20 3d 20 6d |. . | s1 = m|
|00004ad0| 72 61 6e 64 28 29 3b 20 | 0a 20 20 20 20 42 31 20 |rand(); |. B1 |
|00004ae0| 3d 20 73 70 5f 63 6f 70 | 79 28 42 29 3b 0a 0a 20 |= sp_cop|y(B);.. |
|00004af0| 20 20 20 6d 65 6d 5f 73 | 74 61 74 5f 6d 61 72 6b | mem_s|tat_mark|
|00004b00| 28 31 29 3b 0a 20 20 20 | 20 73 70 5f 73 6d 6c 74 |(1);. | sp_smlt|
|00004b10| 28 42 2c 73 31 2c 43 29 | 3b 0a 20 20 20 20 73 70 |(B,s1,C)|;. sp|
|00004b20| 5f 61 64 64 28 41 2c 43 | 2c 43 31 29 3b 0a 20 20 |_add(A,C|,C1);. |
|00004b30| 20 20 73 70 5f 73 75 62 | 28 43 31 2c 41 2c 43 29 | sp_sub|(C1,A,C)|
|00004b40| 3b 0a 20 20 20 20 73 70 | 5f 73 6d 6c 74 28 43 2c |;. sp|_smlt(C,|
|00004b50| 2d 31 2e 30 2f 73 31 2c | 43 29 3b 0a 20 20 20 20 |-1.0/s1,|C);. |
|00004b60| 73 70 5f 61 64 64 28 43 | 2c 42 31 2c 43 29 3b 0a |sp_add(C|,B1,C);.|
|00004b70| 0a 20 20 20 20 73 32 20 | 3d 20 30 2e 30 3b 0a 20 |. s2 |= 0.0;. |
|00004b80| 20 20 20 66 6f 72 20 28 | 6b 3d 30 3b 20 6b 20 3c | for (|k=0; k <|
|00004b90| 20 43 2d 3e 6d 3b 20 6b | 2b 2b 29 20 7b 0a 20 20 | C->m; k|++) {. |
|00004ba0| 20 20 20 20 20 72 20 3d | 20 26 28 43 2d 3e 72 6f | r =| &(C->ro|
|00004bb0| 77 5b 6b 5d 29 3b 0a 20 | 20 20 20 20 20 20 66 6f |w[k]);. | fo|
|00004bc0| 72 20 28 6a 3d 30 3b 20 | 6a 20 3c 20 72 2d 3e 6c |r (j=0; |j < r->l|
|00004bd0| 65 6e 3b 20 6a 2b 2b 29 | 20 7b 0a 09 20 20 69 66 |en; j++)| {.. if|
|00004be0| 20 28 73 32 20 3c 20 66 | 61 62 73 28 72 2d 3e 65 | (s2 < f|abs(r->e|
|00004bf0| 6c 74 5b 6a 5d 2e 76 61 | 6c 29 29 20 0a 09 20 20 |lt[j].va|l)) .. |
|00004c00| 20 20 73 32 20 3d 20 66 | 61 62 73 28 72 2d 3e 65 | s2 = f|abs(r->e|
|00004c10| 6c 74 5b 6a 5d 2e 76 61 | 6c 29 3b 0a 20 20 20 20 |lt[j].va|l);. |
|00004c20| 20 20 20 7d 0a 20 20 20 | 20 7d 0a 0a 20 20 20 20 | }. | }.. |
|00004c30| 69 66 20 28 73 32 20 3e | 20 4d 41 43 48 45 50 53 |if (s2 >| MACHEPS|
|00004c40| 2a 41 2d 3e 6d 29 20 7b | 0a 20 20 20 20 20 20 20 |*A->m) {|. |
|00004c50| 65 72 72 6d 65 73 67 28 | 22 61 64 64 2c 20 73 75 |errmesg(|"add, su|
|00004c60| 62 2c 20 6d 6c 74 20 73 | 70 61 72 73 65 20 6d 61 |b, mlt s|parse ma|
|00004c70| 74 72 69 63 65 73 20 28 | 61 72 67 73 20 6e 6f 74 |trices (|args not|
|00004c80| 20 69 6e 20 73 69 74 75 | 29 5c 6e 22 29 3b 0a 20 | in situ|)\n");. |
|00004c90| 20 20 20 20 20 20 70 72 | 69 6e 74 66 28 22 20 64 | pr|intf(" d|
|00004ca0| 69 66 66 65 72 65 6e 63 | 65 20 3d 20 25 67 20 5b |ifferenc|e = %g [|
|00004cb0| 4d 41 43 45 50 53 20 3d | 20 25 67 5d 5c 6e 22 2c |MACEPS =| %g]\n",|
|00004cc0| 73 32 2c 4d 41 43 48 45 | 50 53 29 3b 0a 20 20 20 |s2,MACHE|PS);. |
|00004cd0| 20 7d 0a 0a 20 20 20 20 | 73 70 5f 6d 6c 74 61 64 | }.. |sp_mltad|
|00004ce0| 64 28 41 2c 42 31 2c 73 | 31 2c 43 31 29 3b 0a 20 |d(A,B1,s|1,C1);. |
|00004cf0| 20 20 20 73 70 5f 73 75 | 62 28 43 31 2c 41 2c 41 | sp_su|b(C1,A,A|
|00004d00| 29 3b 0a 20 20 20 20 73 | 70 5f 73 6d 6c 74 28 41 |);. s|p_smlt(A|
|00004d10| 2c 31 2e 30 2f 73 31 2c | 43 31 29 3b 0a 20 20 20 |,1.0/s1,|C1);. |
|00004d20| 20 73 70 5f 73 75 62 28 | 43 31 2c 42 31 2c 43 31 | sp_sub(|C1,B1,C1|
|00004d30| 29 3b 0a 20 20 20 20 6d | 65 6d 5f 73 74 61 74 5f |);. m|em_stat_|
|00004d40| 66 72 65 65 28 31 29 3b | 0a 0a 20 20 20 20 73 32 |free(1);|.. s2|
|00004d50| 20 3d 20 30 2e 30 3b 0a | 20 20 20 20 66 6f 72 20 | = 0.0;.| for |
|00004d60| 28 6b 3d 30 3b 20 6b 20 | 3c 20 43 31 2d 3e 6d 3b |(k=0; k |< C1->m;|
|00004d70| 20 6b 2b 2b 29 20 7b 0a | 20 20 20 20 20 20 20 72 | k++) {.| r|
|00004d80| 20 3d 20 26 28 43 31 2d | 3e 72 6f 77 5b 6b 5d 29 | = &(C1-|>row[k])|
|00004d90| 3b 0a 20 20 20 20 20 20 | 20 66 6f 72 20 28 6a 3d |;. | for (j=|
|00004da0| 30 3b 20 6a 20 3c 20 72 | 2d 3e 6c 65 6e 3b 20 6a |0; j < r|->len; j|
|00004db0| 2b 2b 29 20 7b 0a 09 20 | 20 69 66 20 28 73 32 20 |++) {.. | if (s2 |
|00004dc0| 3c 20 66 61 62 73 28 72 | 2d 3e 65 6c 74 5b 6a 5d |< fabs(r|->elt[j]|
|00004dd0| 2e 76 61 6c 29 29 20 0a | 09 20 20 20 20 73 32 20 |.val)) .|. s2 |
|00004de0| 3d 20 66 61 62 73 28 72 | 2d 3e 65 6c 74 5b 6a 5d |= fabs(r|->elt[j]|
|00004df0| 2e 76 61 6c 29 3b 0a 20 | 20 20 20 20 20 20 7d 0a |.val);. | }.|
|00004e00| 20 20 20 20 7d 0a 0a 20 | 20 20 20 69 66 20 28 73 | }.. | if (s|
|00004e10| 32 20 3e 20 4d 41 43 48 | 45 50 53 2a 41 2d 3e 6d |2 > MACH|EPS*A->m|
|00004e20| 29 20 7b 0a 20 20 20 20 | 20 20 20 65 72 72 6d 65 |) {. | errme|
|00004e30| 73 67 28 22 61 64 64 2c | 20 73 75 62 2c 20 6d 6c |sg("add,| sub, ml|
|00004e40| 74 20 73 70 61 72 73 65 | 20 6d 61 74 72 69 63 65 |t sparse| matrice|
|00004e50| 73 20 28 61 72 67 73 20 | 6e 6f 74 20 69 6e 20 73 |s (args |not in s|
|00004e60| 69 74 75 29 5c 6e 22 29 | 3b 0a 20 20 20 20 20 20 |itu)\n")|;. |
|00004e70| 20 70 72 69 6e 74 66 28 | 22 20 64 69 66 66 65 72 | printf(|" differ|
|00004e80| 65 6e 63 65 20 3d 20 25 | 67 20 5b 4d 41 43 45 50 |ence = %|g [MACEP|
|00004e90| 53 20 3d 20 25 67 5d 5c | 6e 22 2c 73 32 2c 4d 41 |S = %g]\|n",s2,MA|
|00004ea0| 43 48 45 50 53 29 3b 0a | 20 20 20 20 7d 0a 0a 20 |CHEPS);.| }.. |
|00004eb0| 20 20 20 56 5f 46 52 45 | 45 28 78 29 3b 0a 20 20 | V_FRE|E(x);. |
|00004ec0| 20 20 56 5f 46 52 45 45 | 28 79 29 3b 20 20 20 20 | V_FREE|(y); |
|00004ed0| 0a 20 20 20 20 56 5f 46 | 52 45 45 28 7a 29 3b 0a |. V_F|REE(z);.|
|00004ee0| 20 20 20 20 56 5f 46 52 | 45 45 28 75 29 3b 0a 20 | V_FR|EE(u);. |
|00004ef0| 20 20 20 56 5f 46 52 45 | 45 28 76 29 3b 20 20 0a | V_FRE|E(v); .|
|00004f00| 20 20 20 20 50 58 5f 46 | 52 45 45 28 70 69 76 6f | PX_F|REE(pivo|
|00004f10| 74 29 3b 0a 20 20 20 20 | 53 50 5f 46 52 45 45 28 |t);. |SP_FREE(|
|00004f20| 41 29 3b 0a 20 20 20 20 | 53 50 5f 46 52 45 45 28 |A);. |SP_FREE(|
|00004f30| 42 29 3b 0a 20 20 20 20 | 53 50 5f 46 52 45 45 28 |B);. |SP_FREE(|
|00004f40| 43 29 3b 0a 20 20 20 20 | 53 50 5f 46 52 45 45 28 |C);. |SP_FREE(|
|00004f50| 42 31 29 3b 0a 20 20 20 | 20 53 50 5f 46 52 45 45 |B1);. | SP_FREE|
|00004f60| 28 43 31 29 3b 0a 0a 20 | 20 20 20 70 72 69 6e 74 |(C1);.. | print|
|00004f70| 66 28 22 23 20 44 6f 6e | 65 20 74 65 73 74 69 6e |f("# Don|e testin|
|00004f80| 67 20 28 25 73 29 5c 6e | 22 2c 61 72 67 76 5b 30 |g (%s)\n|",argv[0|
|00004f90| 5d 29 3b 0a 20 20 20 20 | 6d 65 6d 5f 69 6e 66 6f |]);. |mem_info|
|00004fa0| 28 29 3b 0a 7d 0a 20 20 | 20 20 0a 0a 0a 0a 0a 46 |();.}. | .....F|
|00004fb0| 69 6c 65 44 61 74 61 82 | 73 75 62 6d 61 74 00 00 |ileData.|submat..|
|00004fc0| 00 00 00 b5 11 00 00 45 | ff ff ff e0 56 3f 17 03 |.......E|....V?..|
|00004fd0| 00 f7 1c 0a 2f 2a 2a 2a | 2a 2a 2a 2a 2a 2a 2a 2a |..../***|********|
|00004fe0| 2a 2a 2a 2a 2a 2a 2a 2a | 2a 2a 2a 2a 2a 2a 2a 2a |********|********|
|00004ff0| 2a 2a 2a 2a 2a 2a 2a 2a | 2a 2a 2a 2a 2a 2a 2a 2a |********|********|
|00005000| 2a 2a 2a 2a 2a 2a 2a 2a | 2a 2a 2a 2a 2a 2a 2a 2a |********|********|
|00005010| 2a 2a 2a 2a 2a 2a 2a 2a | 2a 2a 2a 2a 2a 2a 2a 0a |********|*******.|
|00005020| 2a 2a 0a 2a 2a 20 43 6f | 70 79 72 69 67 68 74 20 |**.** Co|pyright |
|00005030| 28 43 29 20 31 39 39 33 | 20 44 61 76 69 64 20 45 |(C) 1993| David E|
|00005040| 2e 20 53 74 65 77 61 72 | 64 20 26 20 5a 62 69 67 |. Stewar|d & Zbig|
|00005050| 6e 69 65 77 20 4c 65 79 | 6b 2c 20 61 6c 6c 20 72 |niew Ley|k, all r|
|00005060| 69 67 68 74 73 20 72 65 | 73 65 72 76 65 64 2e 0a |ights re|served..|
|00005070| 2a 2a 0a 2a 2a 09 09 09 | 20 20 20 20 20 4d 65 73 |**.**...| Mes|
|00005080| 63 68 61 63 68 20 4c 69 | 62 72 61 72 79 0a 2a 2a |chach Li|brary.**|
|00005090| 20 0a 2a 2a 20 54 68 69 | 73 20 4d 65 73 63 68 61 | .** Thi|s Mescha|
|000050a0| 63 68 20 4c 69 62 72 61 | 72 79 20 69 73 20 70 72 |ch Libra|ry is pr|
|000050b0| 6f 76 69 64 65 64 20 22 | 61 73 20 69 73 22 20 77 |ovided "|as is" w|
|000050c0| 69 74 68 6f 75 74 20 61 | 6e 79 20 65 78 70 72 65 |ithout a|ny expre|
|000050d0| 73 73 20 0a 2a 2a 20 6f | 72 20 69 6d 70 6c 69 65 |ss .** o|r implie|
|000050e0| 64 20 77 61 72 72 61 6e | 74 79 20 6f 66 20 61 6e |d warran|ty of an|
|000050f0| 79 20 6b 69 6e 64 20 77 | 69 74 68 20 72 65 73 70 |y kind w|ith resp|
|00005100| 65 63 74 20 74 6f 20 74 | 68 69 73 20 73 6f 66 74 |ect to t|his soft|
|00005110| 77 61 72 65 2e 20 0a 2a | 2a 20 49 6e 20 70 61 72 |ware. .*|* In par|
|00005120| 74 69 63 75 6c 61 72 20 | 74 68 65 20 61 75 74 68 |ticular |the auth|
|00005130| 6f 72 73 20 73 68 61 6c | 6c 20 6e 6f 74 20 62 65 |ors shal|l not be|
|00005140| 20 6c 69 61 62 6c 65 20 | 66 6f 72 20 61 6e 79 20 | liable |for any |
|00005150| 64 69 72 65 63 74 2c 20 | 0a 2a 2a 20 69 6e 64 69 |direct, |.** indi|
|00005160| 72 65 63 74 2c 20 73 70 | 65 63 69 61 6c 2c 20 69 |rect, sp|ecial, i|
|00005170| 6e 63 69 64 65 6e 74 61 | 6c 20 6f 72 20 63 6f 6e |ncidenta|l or con|
|00005180| 73 65 71 75 65 6e 74 69 | 61 6c 20 64 61 6d 61 67 |sequenti|al damag|
|00005190| 65 73 20 61 72 69 73 69 | 6e 67 20 0a 2a 2a 20 69 |es arisi|ng .** i|
|000051a0| 6e 20 61 6e 79 20 77 61 | 79 20 66 72 6f 6d 20 75 |n any wa|y from u|
|000051b0| 73 65 20 6f 66 20 74 68 | 65 20 73 6f 66 74 77 61 |se of th|e softwa|
|000051c0| 72 65 2e 0a 2a 2a 20 0a | 2a 2a 20 45 76 65 72 79 |re..** .|** Every|
|000051d0| 6f 6e 65 20 69 73 20 67 | 72 61 6e 74 65 64 20 70 |one is g|ranted p|
|000051e0| 65 72 6d 69 73 73 69 6f | 6e 20 74 6f 20 63 6f 70 |ermissio|n to cop|
|000051f0| 79 2c 20 6d 6f 64 69 66 | 79 20 61 6e 64 20 72 65 |y, modif|y and re|
|00005200| 64 69 73 74 72 69 62 75 | 74 65 20 74 68 69 73 0a |distribu|te this.|
|00005210| 2a 2a 20 4d 65 73 63 68 | 61 63 68 20 4c 69 62 72 |** Mesch|ach Libr|
|00005220| 61 72 79 2c 20 70 72 6f | 76 69 64 65 64 3a 0a 2a |ary, pro|vided:.*|
|00005230| 2a 20 20 31 2e 20 20 41 | 6c 6c 20 63 6f 70 69 65 |* 1. A|ll copie|
|00005240| 73 20 63 6f 6e 74 61 69 | 6e 20 74 68 69 73 20 63 |s contai|n this c|
|00005250| 6f 70 79 72 69 67 68 74 | 20 6e 6f 74 69 63 65 2e |opyright| notice.|
|00005260| 0a 2a 2a 20 20 32 2e 20 | 20 41 6c 6c 20 6d 6f 64 |.** 2. | All mod|
|00005270| 69 66 69 65 64 20 63 6f | 70 69 65 73 20 73 68 61 |ified co|pies sha|
|00005280| 6c 6c 20 63 61 72 72 79 | 20 61 20 6e 6f 74 69 63 |ll carry| a notic|
|00005290| 65 20 73 74 61 74 69 6e | 67 20 77 68 6f 0a 2a 2a |e statin|g who.**|
|000052a0| 20 20 20 20 20 20 6d 61 | 64 65 20 74 68 65 20 6c | ma|de the l|
|000052b0| 61 73 74 20 6d 6f 64 69 | 66 69 63 61 74 69 6f 6e |ast modi|fication|
|000052c0| 20 61 6e 64 20 74 68 65 | 20 64 61 74 65 20 6f 66 | and the| date of|
|000052d0| 20 73 75 63 68 20 6d 6f | 64 69 66 69 63 61 74 69 | such mo|dificati|
|000052e0| 6f 6e 2e 0a 2a 2a 20 20 | 33 2e 20 20 4e 6f 20 63 |on..** |3. No c|
|000052f0| 68 61 72 67 65 20 69 73 | 20 6d 61 64 65 20 66 6f |harge is| made fo|
|00005300| 72 20 74 68 69 73 20 73 | 6f 66 74 77 61 72 65 20 |r this s|oftware |
|00005310| 6f 72 20 77 6f 72 6b 73 | 20 64 65 72 69 76 65 64 |or works| derived|
|00005320| 20 66 72 6f 6d 20 69 74 | 2e 20 20 0a 2a 2a 20 20 | from it|. .** |
|00005330| 20 20 20 20 54 68 69 73 | 20 63 6c 61 75 73 65 20 | This| clause |
|00005340| 73 68 61 6c 6c 20 6e 6f | 74 20 62 65 20 63 6f 6e |shall no|t be con|
|00005350| 73 74 72 75 65 64 20 61 | 73 20 63 6f 6e 73 74 72 |strued a|s constr|
|00005360| 61 69 6e 69 6e 67 20 6f | 74 68 65 72 20 73 6f 66 |aining o|ther sof|
|00005370| 74 77 61 72 65 0a 2a 2a | 20 20 20 20 20 20 64 69 |tware.**| di|
|00005380| 73 74 72 69 62 75 74 65 | 64 20 6f 6e 20 74 68 65 |stribute|d on the|
|00005390| 20 73 61 6d 65 20 6d 65 | 64 69 75 6d 20 61 73 20 | same me|dium as |
|000053a0| 74 68 69 73 20 73 6f 66 | 74 77 61 72 65 2c 20 6e |this sof|tware, n|
|000053b0| 6f 72 20 69 73 20 61 0a | 2a 2a 20 20 20 20 20 20 |or is a.|** |
|000053c0| 64 69 73 74 72 69 62 75 | 74 69 6f 6e 20 66 65 65 |distribu|tion fee|
|000053d0| 20 63 6f 6e 73 69 64 65 | 72 65 64 20 61 20 63 68 | conside|red a ch|
|000053e0| 61 72 67 65 2e 0a 2a 2a | 0a 2a 2a 2a 2a 2a 2a 2a |arge..**|.*******|
|000053f0| 2a 2a 2a 2a 2a 2a 2a 2a | 2a 2a 2a 2a 2a 2a 2a 2a |********|********|
|00005400| 2a 2a 2a 2a 2a 2a 2a 2a | 2a 2a 2a 2a 2a 2a 2a 2a |********|********|
|00005410| 2a 2a 2a 2a 2a 2a 2a 2a | 2a 2a 2a 2a 2a 2a 2a 2a |********|********|
|00005420| 2a 2a 2a 2a 2a 2a 2a 2a | 2a 2a 2a 2a 2a 2a 2a 2a |********|********|
|00005430| 2a 2a 2a 2a 2f 0a 0a 0a | 2f 2a 20 31 2e 32 20 73 |****/...|/* 1.2 s|
|00005440| 75 62 6d 61 74 2e 63 20 | 31 31 2f 32 35 2f 38 37 |ubmat.c |11/25/87|
|00005450| 20 2a 2f 0a 0a 23 69 6e | 63 6c 75 64 65 09 3c 73 | */..#in|clude.<s|
|00005460| 74 64 69 6f 2e 68 3e 0a | 23 69 6e 63 6c 75 64 65 |tdio.h>.|#include|
|00005470| 09 22 6d 61 74 72 69 78 | 2e 68 22 0a 0a 73 74 61 |."matrix|.h"..sta|
|00005480| 74 69 63 09 63 68 61 72 | 09 72 63 73 69 64 5b 5d |tic.char|.rcsid[]|
|00005490| 20 3d 20 22 24 49 64 3a | 20 73 75 62 6d 61 74 2e | = "$Id:| submat.|
|000054a0| 63 2c 76 20 31 2e 32 20 | 31 39 39 34 2f 30 31 2f |c,v 1.2 |1994/01/|
|000054b0| 31 33 20 30 35 3a 32 38 | 3a 31 32 20 64 65 73 20 |13 05:28|:12 des |
|000054c0| 45 78 70 20 24 22 3b 0a | 0a 0a 2f 2a 20 67 65 74 |Exp $";.|../* get|
|000054d0| 5f 63 6f 6c 20 2d 2d 20 | 67 65 74 73 20 61 20 73 |_col -- |gets a s|
|000054e0| 70 65 63 69 66 69 65 64 | 20 63 6f 6c 75 6d 6e 20 |pecified| column |
|000054f0| 6f 66 20 61 20 6d 61 74 | 72 69 78 20 61 6e 64 20 |of a mat|rix and |
|00005500| 72 65 74 72 75 6e 73 20 | 69 74 20 61 73 20 61 20 |retruns |it as a |
|00005510| 76 65 63 74 6f 72 20 2a | 2f 0a 56 45 43 09 2a 67 |vector *|/.VEC.*g|
|00005520| 65 74 5f 63 6f 6c 28 6d | 61 74 2c 63 6f 6c 2c 76 |et_col(m|at,col,v|
|00005530| 65 63 29 0a 75 5f 69 6e | 74 09 63 6f 6c 3b 0a 4d |ec).u_in|t.col;.M|
|00005540| 41 54 09 2a 6d 61 74 3b | 0a 56 45 43 09 2a 76 65 |AT.*mat;|.VEC.*ve|
|00005550| 63 3b 0a 7b 0a 20 20 20 | 75 5f 69 6e 74 09 69 3b |c;.{. |u_int.i;|
|00005560| 0a 20 20 20 0a 20 20 20 | 69 66 20 28 20 6d 61 74 |. . |if ( mat|
|00005570| 3d 3d 28 4d 41 54 20 2a | 29 4e 55 4c 4c 20 29 0a |==(MAT *|)NULL ).|
|00005580| 20 20 20 20 20 65 72 72 | 6f 72 28 45 5f 4e 55 4c | err|or(E_NUL|
|00005590| 4c 2c 22 67 65 74 5f 63 | 6f 6c 22 29 3b 0a 20 20 |L,"get_c|ol");. |
|000055a0| 20 69 66 20 28 20 63 6f | 6c 20 3e 3d 20 6d 61 74 | if ( co|l >= mat|
|000055b0| 2d 3e 6e 20 29 0a 20 20 | 20 20 20 65 72 72 6f 72 |->n ). | error|
|000055c0| 28 45 5f 52 41 4e 47 45 | 2c 22 67 65 74 5f 63 6f |(E_RANGE|,"get_co|
|000055d0| 6c 22 29 3b 0a 20 20 20 | 69 66 20 28 20 76 65 63 |l");. |if ( vec|
|000055e0| 3d 3d 28 56 45 43 20 2a | 29 4e 55 4c 4c 20 7c 7c |==(VEC *|)NULL |||
|000055f0| 20 76 65 63 2d 3e 64 69 | 6d 3c 6d 61 74 2d 3e 6d | vec->di|m<mat->m|
|00005600| 20 29 0a 20 20 20 20 20 | 76 65 63 20 3d 20 76 5f | ). |vec = v_|
|00005610| 72 65 73 69 7a 65 28 76 | 65 63 2c 6d 61 74 2d 3e |resize(v|ec,mat->|
|00005620| 6d 29 3b 0a 20 20 20 0a | 20 20 20 66 6f 72 20 28 |m);. .| for (|
|00005630| 20 69 3d 30 3b 20 69 3c | 6d 61 74 2d 3e 6d 3b 20 | i=0; i<|mat->m; |
|00005640| 69 2b 2b 20 29 0a 20 20 | 20 20 20 76 65 63 2d 3e |i++ ). | vec->|
|00005650| 76 65 5b 69 5d 20 3d 20 | 6d 61 74 2d 3e 6d 65 5b |ve[i] = |mat->me[|
|00005660| 69 5d 5b 63 6f 6c 5d 3b | 0a 20 20 20 0a 20 20 20 |i][col];|. . |
|00005670| 72 65 74 75 72 6e 20 28 | 76 65 63 29 3b 0a 7d 0a |return (|vec);.}.|
|00005680| 0a 2f 2a 20 67 65 74 5f | 72 6f 77 20 2d 2d 20 67 |./* get_|row -- g|
|00005690| 65 74 73 20 61 20 73 70 | 65 63 69 66 69 65 64 20 |ets a sp|ecified |
|000056a0| 72 6f 77 20 6f 66 20 61 | 20 6d 61 74 72 69 78 20 |row of a| matrix |
|000056b0| 61 6e 64 20 72 65 74 72 | 75 6e 73 20 69 74 20 61 |and retr|uns it a|
|000056c0| 73 20 61 20 76 65 63 74 | 6f 72 20 2a 2f 0a 56 45 |s a vect|or */.VE|
|000056d0| 43 09 2a 67 65 74 5f 72 | 6f 77 28 6d 61 74 2c 72 |C.*get_r|ow(mat,r|
|000056e0| 6f 77 2c 76 65 63 29 0a | 75 5f 69 6e 74 09 72 6f |ow,vec).|u_int.ro|
|000056f0| 77 3b 0a 4d 41 54 09 2a | 6d 61 74 3b 0a 56 45 43 |w;.MAT.*|mat;.VEC|
|00005700| 09 2a 76 65 63 3b 0a 7b | 0a 20 20 20 75 5f 69 6e |.*vec;.{|. u_in|
|00005710| 74 09 69 3b 0a 20 20 20 | 0a 20 20 20 69 66 20 28 |t.i;. |. if (|
|00005720| 20 6d 61 74 3d 3d 28 4d | 41 54 20 2a 29 4e 55 4c | mat==(M|AT *)NUL|
|00005730| 4c 20 29 0a 20 20 20 20 | 20 65 72 72 6f 72 28 45 |L ). | error(E|
|00005740| 5f 4e 55 4c 4c 2c 22 67 | 65 74 5f 72 6f 77 22 29 |_NULL,"g|et_row")|
|00005750| 3b 0a 20 20 20 69 66 20 | 28 20 72 6f 77 20 3e 3d |;. if |( row >=|
|00005760| 20 6d 61 74 2d 3e 6d 20 | 29 0a 20 20 20 20 20 65 | mat->m |). e|
|00005770| 72 72 6f 72 28 45 5f 52 | 41 4e 47 45 2c 22 67 65 |rror(E_R|ANGE,"ge|
|00005780| 74 5f 72 6f 77 22 29 3b | 0a 20 20 20 69 66 20 28 |t_row");|. if (|
|00005790| 20 76 65 63 3d 3d 28 56 | 45 43 20 2a 29 4e 55 4c | vec==(V|EC *)NUL|
|000057a0| 4c 20 7c 7c 20 76 65 63 | 2d 3e 64 69 6d 3c 6d 61 |L || vec|->dim<ma|
|000057b0| 74 2d 3e 6e 20 29 0a 20 | 20 20 20 20 76 65 63 20 |t->n ). | vec |
|000057c0| 3d 20 76 5f 72 65 73 69 | 7a 65 28 76 65 63 2c 6d |= v_resi|ze(vec,m|
|000057d0| 61 74 2d 3e 6e 29 3b 0a | 20 20 20 0a 20 20 20 66 |at->n);.| . f|
|000057e0| 6f 72 20 28 20 69 3d 30 | 3b 20 69 3c 6d 61 74 2d |or ( i=0|; i<mat-|
|000057f0| 3e 6e 3b 20 69 2b 2b 20 | 29 0a 20 20 20 20 20 76 |>n; i++ |). v|
|00005800| 65 63 2d 3e 76 65 5b 69 | 5d 20 3d 20 6d 61 74 2d |ec->ve[i|] = mat-|
|00005810| 3e 6d 65 5b 72 6f 77 5d | 5b 69 5d 3b 0a 20 20 20 |>me[row]|[i];. |
|00005820| 0a 20 20 20 72 65 74 75 | 72 6e 20 28 76 65 63 29 |. retu|rn (vec)|
|00005830| 3b 0a 7d 0a 0a 2f 2a 20 | 5f 73 65 74 5f 63 6f 6c |;.}../* |_set_col|
|00005840| 20 2d 2d 20 73 65 74 73 | 20 63 6f 6c 75 6d 6e 20 | -- sets| column |
|00005850| 6f 66 20 6d 61 74 72 69 | 78 20 74 6f 20 76 61 6c |of matri|x to val|
|00005860| 75 65 73 20 67 69 76 65 | 6e 20 69 6e 20 76 65 63 |ues give|n in vec|
|00005870| 20 28 69 6e 20 73 69 74 | 75 29 20 2a 2f 0a 4d 41 | (in sit|u) */.MA|
|00005880| 54 09 2a 5f 73 65 74 5f | 63 6f 6c 28 6d 61 74 2c |T.*_set_|col(mat,|
|00005890| 63 6f 6c 2c 76 65 63 2c | 69 30 29 0a 4d 41 54 09 |col,vec,|i0).MAT.|
|000058a0| 2a 6d 61 74 3b 0a 56 45 | 43 09 2a 76 65 63 3b 0a |*mat;.VE|C.*vec;.|
|000058b0| 75 5f 69 6e 74 09 63 6f | 6c 2c 69 30 3b 0a 7b 0a |u_int.co|l,i0;.{.|
|000058c0| 20 20 20 75 5f 69 6e 74 | 09 69 2c 6c 69 6d 3b 0a | u_int|.i,lim;.|
|000058d0| 20 20 20 0a 20 20 20 69 | 66 20 28 20 6d 61 74 3d | . i|f ( mat=|
|000058e0| 3d 28 4d 41 54 20 2a 29 | 4e 55 4c 4c 20 7c 7c 20 |=(MAT *)|NULL || |
|000058f0| 76 65 63 3d 3d 28 56 45 | 43 20 2a 29 4e 55 4c 4c |vec==(VE|C *)NULL|
|00005900| 20 29 0a 20 20 20 20 20 | 65 72 72 6f 72 28 45 5f | ). |error(E_|
|00005910| 4e 55 4c 4c 2c 22 5f 73 | 65 74 5f 63 6f 6c 22 29 |NULL,"_s|et_col")|
|00005920| 3b 0a 20 20 20 69 66 20 | 28 20 63 6f 6c 20 3e 3d |;. if |( col >=|
|00005930| 20 6d 61 74 2d 3e 6e 20 | 29 0a 20 20 20 20 20 65 | mat->n |). e|
|00005940| 72 72 6f 72 28 45 5f 52 | 41 4e 47 45 2c 22 5f 73 |rror(E_R|ANGE,"_s|
|00005950| 65 74 5f 63 6f 6c 22 29 | 3b 0a 20 20 20 6c 69 6d |et_col")|;. lim|
|00005960| 20 3d 20 6d 69 6e 28 6d | 61 74 2d 3e 6d 2c 76 65 | = min(m|at->m,ve|
|00005970| 63 2d 3e 64 69 6d 29 3b | 0a 20 20 20 66 6f 72 20 |c->dim);|. for |
|00005980| 28 20 69 3d 69 30 3b 20 | 69 3c 6c 69 6d 3b 20 69 |( i=i0; |i<lim; i|
|00005990| 2b 2b 20 29 0a 20 20 20 | 20 20 6d 61 74 2d 3e 6d |++ ). | mat->m|
|000059a0| 65 5b 69 5d 5b 63 6f 6c | 5d 20 3d 20 76 65 63 2d |e[i][col|] = vec-|
|000059b0| 3e 76 65 5b 69 5d 3b 0a | 20 20 20 0a 20 20 20 72 |>ve[i];.| . r|
|000059c0| 65 74 75 72 6e 20 28 6d | 61 74 29 3b 0a 7d 0a 0a |eturn (m|at);.}..|
|000059d0| 2f 2a 20 5f 73 65 74 5f | 72 6f 77 20 2d 2d 20 73 |/* _set_|row -- s|
|000059e0| 65 74 73 20 72 6f 77 20 | 6f 66 20 6d 61 74 72 69 |ets row |of matri|
|000059f0| 78 20 74 6f 20 76 61 6c | 75 65 73 20 67 69 76 65 |x to val|ues give|
|00005a00| 6e 20 69 6e 20 76 65 63 | 20 28 69 6e 20 73 69 74 |n in vec| (in sit|
|00005a10| 75 29 20 2a 2f 0a 4d 41 | 54 09 2a 5f 73 65 74 5f |u) */.MA|T.*_set_|
|00005a20| 72 6f 77 28 6d 61 74 2c | 72 6f 77 2c 76 65 63 2c |row(mat,|row,vec,|
|00005a30| 6a 30 29 0a 4d 41 54 09 | 2a 6d 61 74 3b 0a 56 45 |j0).MAT.|*mat;.VE|
|00005a40| 43 09 2a 76 65 63 3b 0a | 75 5f 69 6e 74 09 72 6f |C.*vec;.|u_int.ro|
|00005a50| 77 2c 6a 30 3b 0a 7b 0a | 20 20 20 75 5f 69 6e 74 |w,j0;.{.| u_int|
|00005a60| 09 6a 2c 6c 69 6d 3b 0a | 20 20 20 0a 20 20 20 69 |.j,lim;.| . i|
|00005a70| 66 20 28 20 6d 61 74 3d | 3d 28 4d 41 54 20 2a 29 |f ( mat=|=(MAT *)|
|00005a80| 4e 55 4c 4c 20 7c 7c 20 | 76 65 63 3d 3d 28 56 45 |NULL || |vec==(VE|
|00005a90| 43 20 2a 29 4e 55 4c 4c | 20 29 0a 20 20 20 20 20 |C *)NULL| ). |
|00005aa0| 65 72 72 6f 72 28 45 5f | 4e 55 4c 4c 2c 22 5f 73 |error(E_|NULL,"_s|
|00005ab0| 65 74 5f 72 6f 77 22 29 | 3b 0a 20 20 20 69 66 20 |et_row")|;. if |
|00005ac0| 28 20 72 6f 77 20 3e 3d | 20 6d 61 74 2d 3e 6d 20 |( row >=| mat->m |
|00005ad0| 29 0a 20 20 20 20 20 65 | 72 72 6f 72 28 45 5f 52 |). e|rror(E_R|
|00005ae0| 41 4e 47 45 2c 22 5f 73 | 65 74 5f 72 6f 77 22 29 |ANGE,"_s|et_row")|
|00005af0| 3b 0a 20 20 20 6c 69 6d | 20 3d 20 6d 69 6e 28 6d |;. lim| = min(m|
|00005b00| 61 74 2d 3e 6e 2c 76 65 | 63 2d 3e 64 69 6d 29 3b |at->n,ve|c->dim);|
|00005b10| 0a 20 20 20 66 6f 72 20 | 28 20 6a 3d 6a 30 3b 20 |. for |( j=j0; |
|00005b20| 6a 3c 6c 69 6d 3b 20 6a | 2b 2b 20 29 0a 20 20 20 |j<lim; j|++ ). |
|00005b30| 20 20 6d 61 74 2d 3e 6d | 65 5b 72 6f 77 5d 5b 6a | mat->m|e[row][j|
|00005b40| 5d 20 3d 20 76 65 63 2d | 3e 76 65 5b 6a 5d 3b 0a |] = vec-|>ve[j];.|
|00005b50| 20 20 20 0a 20 20 20 72 | 65 74 75 72 6e 20 28 6d | . r|eturn (m|
|00005b60| 61 74 29 3b 0a 7d 0a 0a | 2f 2a 20 73 75 62 5f 6d |at);.}..|/* sub_m|
|00005b70| 61 74 20 2d 2d 20 72 65 | 74 75 72 6e 73 20 73 75 |at -- re|turns su|
|00005b80| 62 2d 6d 61 74 72 69 78 | 20 6f 66 20 6f 6c 64 20 |b-matrix| of old |
|00005b90| 77 68 69 63 68 20 69 73 | 20 66 6f 72 6d 65 64 20 |which is| formed |
|00005ba0| 62 79 20 74 68 65 20 72 | 65 63 74 61 6e 67 6c 65 |by the r|ectangle|
|00005bb0| 0a 20 20 20 66 72 6f 6d | 20 28 72 6f 77 31 2c 63 |. from| (row1,c|
|00005bc0| 6f 6c 31 29 20 74 6f 20 | 28 72 6f 77 32 2c 63 6f |ol1) to |(row2,co|
|00005bd0| 6c 32 29 0a 20 20 20 2d | 2d 20 4e 6f 74 65 3a 20 |l2). -|- Note: |
|00005be0| 73 74 6f 72 61 67 65 20 | 69 73 20 73 68 61 72 65 |storage |is share|
|00005bf0| 64 20 73 6f 20 74 68 61 | 74 20 61 6c 74 65 72 69 |d so tha|t alteri|
|00005c00| 6e 67 20 74 68 65 20 22 | 6e 65 77 22 0a 20 20 20 |ng the "|new". |
|00005c10| 6d 61 74 72 69 78 20 77 | 69 6c 6c 20 61 6c 74 65 |matrix w|ill alte|
|00005c20| 72 20 74 68 65 20 22 6f | 6c 64 22 20 6d 61 74 72 |r the "o|ld" matr|
|00005c30| 69 78 20 2a 2f 0a 4d 41 | 54 09 2a 73 75 62 5f 6d |ix */.MA|T.*sub_m|
|00005c40| 61 74 28 6f 6c 64 2c 72 | 6f 77 31 2c 63 6f 6c 31 |at(old,r|ow1,col1|
|00005c50| 2c 72 6f 77 32 2c 63 6f | 6c 32 2c 6e 65 77 29 0a |,row2,co|l2,new).|
|00005c60| 4d 41 54 09 2a 6f 6c 64 | 2c 2a 6e 65 77 3b 0a 75 |MAT.*old|,*new;.u|
|00005c70| 5f 69 6e 74 09 72 6f 77 | 31 2c 63 6f 6c 31 2c 72 |_int.row|1,col1,r|
|00005c80| 6f 77 32 2c 63 6f 6c 32 | 3b 0a 7b 0a 20 20 20 75 |ow2,col2|;.{. u|
|00005c90| 5f 69 6e 74 09 69 3b 0a | 20 20 20 0a 20 20 20 69 |_int.i;.| . i|
|00005ca0| 66 20 28 20 6f 6c 64 3d | 3d 28 4d 41 54 20 2a 29 |f ( old=|=(MAT *)|
|00005cb0| 4e 55 4c 4c 20 29 0a 20 | 20 20 20 20 65 72 72 6f |NULL ). | erro|
|00005cc0| 72 28 45 5f 4e 55 4c 4c | 2c 22 73 75 62 5f 6d 61 |r(E_NULL|,"sub_ma|
|00005cd0| 74 22 29 3b 0a 20 20 20 | 69 66 20 28 20 72 6f 77 |t");. |if ( row|
|00005ce0| 31 20 3e 20 72 6f 77 32 | 20 7c 7c 20 63 6f 6c 31 |1 > row2| || col1|
|00005cf0| 20 3e 20 63 6f 6c 32 20 | 7c 7c 20 72 6f 77 32 20 | > col2 ||| row2 |
|00005d00| 3e 3d 20 6f 6c 64 2d 3e | 6d 20 7c 7c 20 63 6f 6c |>= old->|m || col|
|00005d10| 32 20 3e 3d 20 6f 6c 64 | 2d 3e 6e 20 29 0a 20 20 |2 >= old|->n ). |
|00005d20| 20 20 20 65 72 72 6f 72 | 28 45 5f 52 41 4e 47 45 | error|(E_RANGE|
|00005d30| 2c 22 73 75 62 5f 6d 61 | 74 22 29 3b 0a 20 20 20 |,"sub_ma|t");. |
|00005d40| 69 66 20 28 20 6e 65 77 | 3d 3d 28 4d 41 54 20 2a |if ( new|==(MAT *|
|00005d50| 29 4e 55 4c 4c 20 7c 7c | 20 6e 65 77 2d 3e 6d 20 |)NULL ||| new->m |
|00005d60| 3c 20 72 6f 77 32 2d 72 | 6f 77 31 2b 31 20 29 0a |< row2-r|ow1+1 ).|
|00005d70| 20 20 20 7b 0a 20 20 20 | 20 20 20 6e 65 77 20 3d | {. | new =|
|00005d80| 20 4e 45 57 28 4d 41 54 | 29 3b 0a 20 20 20 20 20 | NEW(MAT|);. |
|00005d90| 20 6e 65 77 2d 3e 6d 65 | 20 3d 20 4e 45 57 5f 41 | new->me| = NEW_A|
|00005da0| 28 72 6f 77 32 2d 72 6f | 77 31 2b 31 2c 52 65 61 |(row2-ro|w1+1,Rea|
|00005db0| 6c 20 2a 29 3b 0a 20 20 | 20 20 20 20 69 66 20 28 |l *);. | if (|
|00005dc0| 20 6e 65 77 3d 3d 28 4d | 41 54 20 2a 29 4e 55 4c | new==(M|AT *)NUL|
|00005dd0| 4c 20 7c 7c 20 6e 65 77 | 2d 3e 6d 65 3d 3d 28 52 |L || new|->me==(R|
|00005de0| 65 61 6c 20 2a 2a 29 4e | 55 4c 4c 20 29 0a 09 65 |eal **)N|ULL )..e|
|00005df0| 72 72 6f 72 28 45 5f 4d | 45 4d 2c 22 73 75 62 5f |rror(E_M|EM,"sub_|
|00005e00| 6d 61 74 22 29 3b 0a 20 | 20 20 20 20 20 65 6c 73 |mat");. | els|
|00005e10| 65 20 69 66 20 28 6d 65 | 6d 5f 69 6e 66 6f 5f 69 |e if (me|m_info_i|
|00005e20| 73 5f 6f 6e 28 29 29 20 | 7b 0a 09 20 6d 65 6d 5f |s_on()) |{.. mem_|
|00005e30| 62 79 74 65 73 28 54 59 | 50 45 5f 4d 41 54 2c 30 |bytes(TY|PE_MAT,0|
|00005e40| 2c 73 69 7a 65 6f 66 28 | 4d 41 54 29 2b 0a 09 09 |,sizeof(|MAT)+...|
|00005e50| 20 20 20 20 20 20 28 72 | 6f 77 32 2d 72 6f 77 31 | (r|ow2-row1|
|00005e60| 2b 31 29 2a 73 69 7a 65 | 6f 66 28 52 65 61 6c 20 |+1)*size|of(Real |
|00005e70| 2a 29 29 3b 0a 20 20 20 | 20 20 20 7d 0a 20 20 20 |*));. | }. |
|00005e80| 20 20 20 0a 20 20 20 7d | 0a 20 20 20 6e 65 77 2d | . }|. new-|
|00005e90| 3e 6d 20 3d 20 72 6f 77 | 32 2d 72 6f 77 31 2b 31 |>m = row|2-row1+1|
|00005ea0| 3b 0a 20 20 20 0a 20 20 | 20 6e 65 77 2d 3e 6e 20 |;. . | new->n |
|00005eb0| 3d 20 63 6f 6c 32 2d 63 | 6f 6c 31 2b 31 3b 0a 20 |= col2-c|ol1+1;. |
|00005ec0| 20 20 0a 20 20 20 6e 65 | 77 2d 3e 62 61 73 65 20 | . ne|w->base |
|00005ed0| 3d 20 28 52 65 61 6c 20 | 2a 29 4e 55 4c 4c 3b 0a |= (Real |*)NULL;.|
|00005ee0| 20 20 20 0a 20 20 20 66 | 6f 72 20 28 20 69 3d 30 | . f|or ( i=0|
|00005ef0| 3b 20 69 20 3c 20 6e 65 | 77 2d 3e 6d 3b 20 69 2b |; i < ne|w->m; i+|
|00005f00| 2b 20 29 0a 20 20 20 20 | 20 6e 65 77 2d 3e 6d 65 |+ ). | new->me|
|00005f10| 5b 69 5d 20 3d 20 28 6f | 6c 64 2d 3e 6d 65 5b 69 |[i] = (o|ld->me[i|
|00005f20| 2b 72 6f 77 31 5d 29 20 | 2b 20 63 6f 6c 31 3b 0a |+row1]) |+ col1;.|
|00005f30| 20 20 20 0a 20 20 20 72 | 65 74 75 72 6e 20 28 6e | . r|eturn (n|
|00005f40| 65 77 29 3b 0a 7d 0a 0a | 0a 2f 2a 20 73 75 62 5f |ew);.}..|./* sub_|
|00005f50| 76 65 63 20 2d 2d 20 72 | 65 74 75 72 6e 73 20 73 |vec -- r|eturns s|
|00005f60| 75 62 2d 76 65 63 74 6f | 72 20 77 68 69 63 68 20 |ub-vecto|r which |
|00005f70| 69 73 20 66 6f 72 6d 65 | 64 20 62 79 20 74 68 65 |is forme|d by the|
|00005f80| 20 65 6c 65 6d 65 6e 74 | 73 20 69 31 20 74 6f 20 | element|s i1 to |
|00005f90| 69 32 0a 20 20 20 2d 2d | 20 61 73 20 66 6f 72 20 |i2. --| as for |
|00005fa0| 73 75 62 5f 6d 61 74 2c | 20 73 74 6f 72 61 67 65 |sub_mat,| storage|
|00005fb0| 20 69 73 20 73 68 61 72 | 65 64 20 2a 2f 0a 56 45 | is shar|ed */.VE|
|00005fc0| 43 09 2a 73 75 62 5f 76 | 65 63 28 6f 6c 64 2c 69 |C.*sub_v|ec(old,i|
|00005fd0| 31 2c 69 32 2c 6e 65 77 | 29 0a 56 45 43 09 2a 6f |1,i2,new|).VEC.*o|
|00005fe0| 6c 64 2c 20 2a 6e 65 77 | 3b 0a 69 6e 74 09 69 31 |ld, *new|;.int.i1|
|00005ff0| 2c 20 69 32 3b 0a 7b 0a | 20 20 20 69 66 20 28 20 |, i2;.{.| if ( |
|00006000| 6f 6c 64 20 3d 3d 20 28 | 56 45 43 20 2a 29 4e 55 |old == (|VEC *)NU|
|00006010| 4c 4c 20 29 0a 20 20 20 | 20 20 65 72 72 6f 72 28 |LL ). | error(|
|00006020| 45 5f 4e 55 4c 4c 2c 22 | 73 75 62 5f 76 65 63 22 |E_NULL,"|sub_vec"|
|00006030| 29 3b 0a 20 20 20 69 66 | 20 28 20 69 31 20 3e 20 |);. if| ( i1 > |
|00006040| 69 32 20 7c 7c 20 6f 6c | 64 2d 3e 64 69 6d 20 3c |i2 || ol|d->dim <|
|00006050| 20 69 32 20 29 0a 20 20 | 20 20 20 65 72 72 6f 72 | i2 ). | error|
|00006060| 28 45 5f 52 41 4e 47 45 | 2c 22 73 75 62 5f 76 65 |(E_RANGE|,"sub_ve|
|00006070| 63 22 29 3b 0a 20 20 20 | 0a 20 20 20 69 66 20 28 |c");. |. if (|
|00006080| 20 6e 65 77 20 3d 3d 20 | 28 56 45 43 20 2a 29 4e | new == |(VEC *)N|
|00006090| 55 4c 4c 20 29 0a 20 20 | 20 20 20 6e 65 77 20 3d |ULL ). | new =|
|000060a0| 20 4e 45 57 28 56 45 43 | 29 3b 0a 20 20 20 69 66 | NEW(VEC|);. if|
|000060b0| 20 28 20 6e 65 77 20 3d | 3d 20 28 56 45 43 20 2a | ( new =|= (VEC *|
|000060c0| 29 4e 55 4c 4c 20 29 0a | 20 20 20 20 20 65 72 72 |)NULL ).| err|
|000060d0| 6f 72 28 45 5f 4d 45 4d | 2c 22 73 75 62 5f 76 65 |or(E_MEM|,"sub_ve|
|000060e0| 63 22 29 3b 0a 20 20 20 | 65 6c 73 65 20 69 66 20 |c");. |else if |
|000060f0| 28 6d 65 6d 5f 69 6e 66 | 6f 5f 69 73 5f 6f 6e 28 |(mem_inf|o_is_on(|
|00006100| 29 29 20 7b 0a 20 20 20 | 20 20 20 6d 65 6d 5f 62 |)) {. | mem_b|
|00006110| 79 74 65 73 28 54 59 50 | 45 5f 56 45 43 2c 30 2c |ytes(TYP|E_VEC,0,|
|00006120| 73 69 7a 65 6f 66 28 56 | 45 43 29 29 3b 0a 20 20 |sizeof(V|EC));. |
|00006130| 20 7d 0a 20 20 20 0a 20 | 20 20 0a 20 20 20 6e 65 | }. . | . ne|
|00006140| 77 2d 3e 64 69 6d 20 3d | 20 69 32 20 2d 20 69 31 |w->dim =| i2 - i1|
|00006150| 20 2b 20 31 3b 0a 20 20 | 20 6e 65 77 2d 3e 76 65 | + 1;. | new->ve|
|00006160| 20 3d 20 26 28 6f 6c 64 | 2d 3e 76 65 5b 69 31 5d | = &(old|->ve[i1]|
|00006170| 29 3b 0a 20 20 20 0a 20 | 20 20 72 65 74 75 72 6e |);. . | return|
|00006180| 20 6e 65 77 3b 0a 7d 0a | 46 69 6c 65 44 61 74 61 | new;.}.|FileData|
|00006190| 82 73 76 64 00 00 00 00 | 00 00 00 00 bd 26 00 00 |.svd....|.....&..|
|000061a0| 45 ff ff ff 2c d2 40 17 | 03 00 96 ff 0a 2f 2a 2a |E...,.@.|...../**|
|000061b0| 2a 2a 2a 2a 2a 2a 2a 2a | 2a 2a 2a 2a 2a 2a 2a 2a |********|********|
|000061c0| 2a 2a 2a 2a 2a 2a 2a 2a | 2a 2a 2a 2a 2a 2a 2a 2a |********|********|
|000061d0| 2a 2a 2a 2a 2a 2a 2a 2a | 2a 2a 2a 2a 2a 2a 2a 2a |********|********|
|000061e0| 2a 2a 2a 2a 2a 2a 2a 2a | 2a 2a 2a 2a 2a 2a 2a 2a |********|********|
|000061f0| 2a 2a 2a 2a 2a 2a 2a 2a | 0a 2a 2a 0a 2a 2a 20 43 |********|.**.** C|
|00006200| 6f 70 79 72 69 67 68 74 | 20 28 43 29 20 31 39 39 |opyright| (C) 199|
|00006210| 33 20 44 61 76 69 64 20 | 45 2e 20 53 74 65 77 61 |3 David |E. Stewa|
|00006220| 72 64 20 26 20 5a 62 69 | 67 6e 69 65 77 20 4c 65 |rd & Zbi|gniew Le|
|00006230| 79 6b 2c 20 61 6c 6c 20 | 72 69 67 68 74 73 20 72 |yk, all |rights r|
|00006240| 65 73 65 72 76 65 64 2e | 0a 2a 2a 0a 2a 2a 09 09 |eserved.|.**.**..|
|00006250| 09 20 20 20 20 20 4d 65 | 73 63 68 61 63 68 20 4c |. Me|schach L|
|00006260| 69 62 72 61 72 79 0a 2a | 2a 20 0a 2a 2a 20 54 68 |ibrary.*|* .** Th|
|00006270| 69 73 20 4d 65 73 63 68 | 61 63 68 20 4c 69 62 72 |is Mesch|ach Libr|
|00006280| 61 72 79 20 69 73 20 70 | 72 6f 76 69 64 65 64 20 |ary is p|rovided |
|00006290| 22 61 73 20 69 73 22 20 | 77 69 74 68 6f 75 74 20 |"as is" |without |
|000062a0| 61 6e 79 20 65 78 70 72 | 65 73 73 20 0a 2a 2a 20 |any expr|ess .** |
|000062b0| 6f 72 20 69 6d 70 6c 69 | 65 64 20 77 61 72 72 61 |or impli|ed warra|
|000062c0| 6e 74 79 20 6f 66 20 61 | 6e 79 20 6b 69 6e 64 20 |nty of a|ny kind |
|000062d0| 77 69 74 68 20 72 65 73 | 70 65 63 74 20 74 6f 20 |with res|pect to |
|000062e0| 74 68 69 73 20 73 6f 66 | 74 77 61 72 65 2e 20 0a |this sof|tware. .|
|000062f0| 2a 2a 20 49 6e 20 70 61 | 72 74 69 63 75 6c 61 72 |** In pa|rticular|
|00006300| 20 74 68 65 20 61 75 74 | 68 6f 72 73 20 73 68 61 | the aut|hors sha|
|00006310| 6c 6c 20 6e 6f 74 20 62 | 65 20 6c 69 61 62 6c 65 |ll not b|e liable|
|00006320| 20 66 6f 72 20 61 6e 79 | 20 64 69 72 65 63 74 2c | for any| direct,|
|00006330| 20 0a 2a 2a 20 69 6e 64 | 69 72 65 63 74 2c 20 73 | .** ind|irect, s|
|00006340| 70 65 63 69 61 6c 2c 20 | 69 6e 63 69 64 65 6e 74 |pecial, |incident|
|00006350| 61 6c 20 6f 72 20 63 6f | 6e 73 65 71 75 65 6e 74 |al or co|nsequent|
|00006360| 69 61 6c 20 64 61 6d 61 | 67 65 73 20 61 72 69 73 |ial dama|ges aris|
|00006370| 69 6e 67 20 0a 2a 2a 20 | 69 6e 20 61 6e 79 20 77 |ing .** |in any w|
|00006380| 61 79 20 66 72 6f 6d 20 | 75 73 65 20 6f 66 20 74 |ay from |use of t|
|00006390| 68 65 20 73 6f 66 74 77 | 61 72 65 2e 0a 2a 2a 20 |he softw|are..** |
|000063a0| 0a 2a 2a 20 45 76 65 72 | 79 6f 6e 65 20 69 73 20 |.** Ever|yone is |
|000063b0| 67 72 61 6e 74 65 64 20 | 70 65 72 6d 69 73 73 69 |granted |permissi|
|000063c0| 6f 6e 20 74 6f 20 63 6f | 70 79 2c 20 6d 6f 64 69 |on to co|py, modi|
|000063d0| 66 79 20 61 6e 64 20 72 | 65 64 69 73 74 72 69 62 |fy and r|edistrib|
|000063e0| 75 74 65 20 74 68 69 73 | 0a 2a 2a 20 4d 65 73 63 |ute this|.** Mesc|
|000063f0| 68 61 63 68 20 4c 69 62 | 72 61 72 79 2c 20 70 72 |hach Lib|rary, pr|
+--------+-------------------------+-------------------------+--------+--------+
Only 25.0 KB of data is shown above.