Changeset 1e579c6 in git for kernel/rmodulo2m.cc
- Timestamp:
- Jun 20, 2007, 11:39:25 AM (17 years ago)
- Branches:
- (u'spielwiese', 'fe61d9c35bf7c61f2b6cbf1b56e25e2f08d536cc')
- Children:
- 07e8ae3b1877436cb95506c90d799438d558c703
- Parents:
- f7aaec31bd73e9e5b3b2bd84ee5ff4fab2de4691
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
kernel/rmodulo2m.cc
rf7aaec3 r1e579c6 2 2 * Computer Algebra System SINGULAR * 3 3 ****************************************/ 4 /* $Id: rmodulo2m.cc,v 1.1 1 2007-05-23 07:47:31wienand Exp $ */4 /* $Id: rmodulo2m.cc,v 1.12 2007-06-20 09:39:25 wienand Exp $ */ 5 5 /* 6 6 * ABSTRACT: numbers modulo 2^m … … 80 80 } 81 81 82 /* 83 * Give the largest non unit k, such that a = x * k, b = y * k has 84 * a solution. 85 */ 86 number nr2mExtGcd (number a, number b, number *s, number *t) 87 { 88 NATNUMBER res = 0; 89 if ((NATNUMBER) a == 0 && (NATNUMBER) b == 0) return (number) 1; 90 while ((NATNUMBER) a % 2 == 0 && (NATNUMBER) b % 2 == 0) 91 { 92 a = (number) ((NATNUMBER) a / 2); 93 b = (number) ((NATNUMBER) b / 2); 94 res++; 95 } 96 if ((NATNUMBER) b % 2 == 0) 97 { 98 *t = NULL; 99 *s = nr2mInvers(a); 100 return (number) ((1L << res));// * (NATNUMBER) a); // (2**res)*a a ist Einheit 101 } 102 else 103 { 104 *s = NULL; 105 *t = nr2mInvers(b); 106 return (number) ((1L << res));// * (NATNUMBER) b); // (2**res)*b b ist Einheit 107 } 108 } 109 82 110 void nr2mPower (number a, int i, number * result) 83 111 { … … 126 154 { 127 155 return nr2mSubM(a,b); 156 } 157 158 BOOLEAN nr2mIsUnit (number a) 159 { 160 return ((NATNUMBER) a % 2 == 1); 161 } 162 163 number nr2mGetUnit (number k) 164 { 165 if (k == NULL) 166 return (number) 1; 167 NATNUMBER tmp = (NATNUMBER) k; 168 while (tmp % 2 == 0) 169 tmp = tmp / 2; 170 return (number) tmp; 128 171 } 129 172 … … 372 415 else 373 416 { 374 WarnS("nInit Charfailed");417 WarnS("nInitExp failed"); 375 418 } 376 419 }
Note: See TracChangeset
for help on using the changeset viewer.