Changeset 206e158 in git for kernel/rmodulo2m.cc


Ignore:
Timestamp:
May 11, 2007, 12:48:05 PM (17 years ago)
Author:
Oliver Wienand <wienand@…>
Branches:
(u'spielwiese', 'fe61d9c35bf7c61f2b6cbf1b56e25e2f08d536cc')
Children:
d15996cd44ce997d3360fac629f4062adb1c4836
Parents:
3fd4df896525da08d34f33e88e6239994fa4d0e6
Message:
structs.h, numbers.*, rmodulo*:
new method nComp
nIntDiv(0, a) = module / a in rmodulo

ringgb.*:
adapted for more generic rings

ring.h:
rField_is_Domain new

k*:
adapted for gbs over Z/m


git-svn-id: file:///usr/local/Singular/svn/trunk@10034 2c84dea3-7e68-4137-9b89-c4e89433aadc
File:
1 edited

Legend:

Unmodified
Added
Removed
  • kernel/rmodulo2m.cc

    r3fd4df r206e158  
    22*  Computer Algebra System SINGULAR     *
    33****************************************/
    4 /* $Id: rmodulo2m.cc,v 1.8 2007-05-10 08:12:43 wienand Exp $ */
     4/* $Id: rmodulo2m.cc,v 1.9 2007-05-11 10:48:05 wienand Exp $ */
    55/*
    66* ABSTRACT: numbers modulo 2^m
     
    7070    res++;
    7171  }
    72   if ((NATNUMBER) b % 2 == 0)
    73   {
    74     return (number) ((1L << res));// * (NATNUMBER) a);  // (2**res)*a    a ist Einheit
    75   }
    76   else
    77   {
     72//  if ((NATNUMBER) b % 2 == 0)
     73//  {
     74//    return (number) ((1L << res));// * (NATNUMBER) a);  // (2**res)*a    a ist Einheit
     75//  }
     76//  else
     77//  {
    7878    return (number) ((1L << res));// * (NATNUMBER) b);  // (2**res)*b    b ist Einheit
    79   }
     79//  }
    8080}
    8181
     
    163163}
    164164  return ((NATNUMBER) b % 2 == 1);
     165}
     166
     167int nr2mComp(number as, number bs)
     168{
     169  NATNUMBER a = (NATNUMBER) as;
     170  NATNUMBER b = (NATNUMBER) bs;
     171  assume(a != 0 && b != 0);
     172  while (a % 2 == 0 && b % 2 == 0)
     173  {
     174    a = a / 2;
     175    b = b / 2;
     176  }
     177  if (a % 2 == 0)
     178  {
     179    return -1;
     180  }
     181  else
     182  {
     183    if (b % 2 == 1)
     184    {
     185      return 0;
     186    }
     187    else
     188    {
     189      return 1;
     190    }
     191  }
    165192}
    166193
     
    271298  if ((NATNUMBER)a==0)
    272299  {
    273     return (number) 0;
    274   }
    275   else
    276   {
     300    if ((NATNUMBER)b==0)
     301      return (number) 1;
     302    return (number) (nr2mModul / (NATNUMBER) b);
     303  }
     304  else
     305  {
     306    if ((NATNUMBER)b==0)
     307      return (number) 0;
    277308    return (number) ((NATNUMBER) a / (NATNUMBER) b);
    278309  }
Note: See TracChangeset for help on using the changeset viewer.