My Project
Loading...
Searching...
No Matches
gnumpc.cc File Reference
#include "misc/auxiliary.h"
#include "misc/mylimits.h"
#include "reporter/reporter.h"
#include "coeffs/coeffs.h"
#include "coeffs/numbers.h"
#include "coeffs/mpr_complex.h"
#include "coeffs/gnumpc.h"
#include "coeffs/longrat.h"
#include "coeffs/gnumpfl.h"
#include "coeffs/modulop.h"
#include "coeffs/shortfl.h"

Go to the source code of this file.

Functions

static BOOLEAN ngcDBTest (number, const char *, const int, const coeffs r)
 
static number ngcParameter (int i, const coeffs r)
 
static number ngcInit (long i, const coeffs r)
 
static long ngcInt (number &i, const coeffs r)
 
static BOOLEAN ngcIsZero (number a, const coeffs r)
 
static int ngcSize (number n, const coeffs R)
 
static void ngcDelete (number *a, const coeffs r)
 
static number ngcCopy (number a, const coeffs r)
 
static number ngcNeg (number a, const coeffs R)
 
static number ngcInvers (number a, const coeffs R)
 
static number ngcAdd (number a, number b, const coeffs R)
 
static void ngcInpAdd (number &a, number b, const coeffs R)
 
static number ngcSub (number a, number b, const coeffs R)
 
static number ngcMult (number a, number b, const coeffs R)
 
static void ngcInpMult (number &a, number b, const coeffs R)
 
static number ngcDiv (number a, number b, const coeffs r)
 
static void ngcPower (number x, int exp, number *u, const coeffs r)
 
static number ngcRePart (number a, const coeffs r)
 
static number ngcImPart (number a, const coeffs r)
 
static BOOLEAN ngcGreaterZero (number a, const coeffs r)
 
static BOOLEAN ngcGreater (number a, number b, const coeffs r)
 
static BOOLEAN ngcEqual (number a, number b, const coeffs r)
 
static BOOLEAN ngcIsOne (number a, const coeffs r)
 
static BOOLEAN ngcIsMOne (number a, const coeffs r)
 
static const char * ngcRead (const char *s, number *a, const coeffs r)
 
static void ngcWrite (number a, const coeffs r)
 
static BOOLEAN ngcCoeffIsEqual (const coeffs r, n_coeffType n, void *parameter)
 
static void ngcKillChar (coeffs r)
 
static char * ngcCoeffName (const coeffs r)
 
static void ngcCoeffWrite (const coeffs r, BOOLEAN)
 
static number ngcMapQ (number from, const coeffs aRing, const coeffs r)
 
static number ngcMapZ (number from, const coeffs aRing, const coeffs r)
 
static number ngcMapLongR (number from, const coeffs aRing, const coeffs r)
 
static number ngcMapR (number from, const coeffs aRing, const coeffs r)
 
static number ngcMapP (number from, const coeffs aRing, const coeffs r)
 
static number ngcCopyMap (number from, const coeffs aRing, const coeffs r)
 
static number ngcInitMPZ (mpz_t m, const coeffs)
 
static nMapFunc ngcSetMap (const coeffs src, const coeffs dst)
 
BOOLEAN ngcInitChar (coeffs n, void *parameter)
 Initialize r (n_long_C)
 
void ngcSetChar (const coeffs r)
 

Function Documentation

◆ ngcAdd()

static number ngcAdd ( number a,
number b,
const coeffs R )
static

Definition at line 151 of file gnumpc.cc.

152{
154
155 gmp_complex* r= new gmp_complex( (*(gmp_complex*)a) + (*(gmp_complex*)b) );
156 return (number)r;
157}
CanonicalForm b
Definition cfModGcd.cc:4111
gmp_complex numbers based on
@ n_long_C
complex floating point (GMP) numbers
Definition coeffs.h:41
static FORCE_INLINE n_coeffType getCoeffType(const coeffs r)
Returns the type of coeffs domain.
Definition coeffs.h:429
#define assume(x)
Definition mod2.h:389
#define R
Definition sirandom.c:27

◆ ngcCoeffIsEqual()

static BOOLEAN ngcCoeffIsEqual ( const coeffs r,
n_coeffType n,
void * parameter )
static

Definition at line 384 of file gnumpc.cc.

385{
386 if (n==n_long_C)
387 {
388 LongComplexInfo* p = (LongComplexInfo *)(parameter);
389
390 if ((p==NULL)
391 && (SHORT_REAL_LENGTH==r->float_len)
392 && (SHORT_REAL_LENGTH==r->float_len2)
393 && (strcmp("i",n_ParameterNames(r)[0]) == 0)
394 )
395 return TRUE;
396 if ((p!=NULL) &&
397 (p->float_len == r->float_len) &&
398 (p->float_len2 == r->float_len2)
399 )
400 if (strcmp(p->par_name, n_ParameterNames(r)[0]) == 0)
401 return (TRUE);
402 }
403 return (FALSE);
404}
#define TRUE
Definition auxiliary.h:101
#define FALSE
Definition auxiliary.h:97
int p
Definition cfModGcd.cc:4086
static FORCE_INLINE char const ** n_ParameterNames(const coeffs r)
Returns a (const!) pointer to (const char*) names of parameters.
Definition coeffs.h:771
#define SHORT_REAL_LENGTH
Definition numbers.h:57
#define NULL
Definition omList.c:12

◆ ngcCoeffName()

static char * ngcCoeffName ( const coeffs r)
static

Definition at line 419 of file gnumpc.cc.

420{
421 STATIC_VAR char ngcCoeffName_buf[40];
422 const char *p=n_ParameterNames(r)[0];
423 sprintf(ngcCoeffName_buf,"complex,%d,%d,%s",r->float_len,r->float_len2,p);
424 return ngcCoeffName_buf;
425}
#define STATIC_VAR
Definition globaldefs.h:7

◆ ngcCoeffWrite()

static void ngcCoeffWrite ( const coeffs r,
BOOLEAN  )
static

Definition at line 427 of file gnumpc.cc.

428{
429 Print("real[%s](complex:%d digits, additional %d digits)/(%s^2+1)",n_ParameterNames(r)[0],
430 r->float_len, r->float_len2, n_ParameterNames(r)[0]); /* long C */
431}
#define Print
Definition emacs.cc:80

◆ ngcCopy()

static number ngcCopy ( number a,
const coeffs r )
static

Definition at line 107 of file gnumpc.cc.

108{
110
111 gmp_complex* b= new gmp_complex( *(gmp_complex*)a );
112 return (number)b;
113}

◆ ngcCopyMap()

static number ngcCopyMap ( number from,
const coeffs aRing,
const coeffs r )
static

Definition at line 507 of file gnumpc.cc.

508{
510 assume( getCoeffType(aRing) == n_long_C );
511
512 gmp_complex* b = NULL;
513
514 if ( from != NULL )
515 {
516 b = new gmp_complex( *(gmp_complex*)from );
517 }
518 return (number)b;
519}

◆ ngcDBTest()

static BOOLEAN ngcDBTest ( number ,
const char * ,
const int ,
const coeffs r )
static

Definition at line 27 of file gnumpc.cc.

28{
30
31 return TRUE;
32}

◆ ngcDelete()

static void ngcDelete ( number * a,
const coeffs r )
static

Definition at line 93 of file gnumpc.cc.

94{
96
97 if ( *a != NULL )
98 {
99 delete *(gmp_complex**)a;
100 *a=NULL;
101 }
102}

◆ ngcDiv()

static number ngcDiv ( number a,
number b,
const coeffs r )
static

Definition at line 198 of file gnumpc.cc.

199{
201
202 if (((gmp_complex*)b)->isZero())
203 {
204 // a/0 = error
206 return (number)new gmp_complex( 0 );
207 }
208 gmp_complex* res = new gmp_complex( (*(gmp_complex*)a) / (*(gmp_complex*)b) );
209 return (number)res;
210}
CanonicalForm res
Definition facAbsFact.cc:60
bool isZero(const CFArray &A)
checks if entries of A are zero
void WerrorS(const char *s)
Definition feFopen.cc:24
const char *const nDivBy0
Definition numbers.h:89

◆ ngcEqual()

static BOOLEAN ngcEqual ( number a,
number b,
const coeffs r )
static

Definition at line 301 of file gnumpc.cc.

302{
304
305 gmp_complex *aa=(gmp_complex*)a;
307 return (*aa) == (*bb);
308}

◆ ngcGreater()

static BOOLEAN ngcGreater ( number a,
number b,
const coeffs r )
static

Definition at line 289 of file gnumpc.cc.

290{
292
293 gmp_complex *aa=(gmp_complex*)a;
295 return (*aa) > (*bb);
296}

◆ ngcGreaterZero()

static BOOLEAN ngcGreaterZero ( number a,
const coeffs r )
static

Definition at line 276 of file gnumpc.cc.

277{
279
280 if ( ! ((gmp_complex*)a)->imag().isZero() )
281 return ( abs( *(gmp_complex*)a).sign() >= 0 );
282 else
283 return ( ((gmp_complex*)a)->real().sign() >= 0 );
284}
Rational abs(const Rational &a)
Definition GMPrat.cc:436
static int sign(int x)
Definition ring.cc:3503

◆ ngcImPart()

static number ngcImPart ( number a,
const coeffs r )
static

Definition at line 265 of file gnumpc.cc.

266{
268
269 gmp_complex* n = new gmp_complex(((gmp_complex*)a)->imag());
270 return (number)n;
271}

◆ ngcInit()

static number ngcInit ( long i,
const coeffs r )
static

Definition at line 49 of file gnumpc.cc.

50{
52
53 gmp_complex* n= new gmp_complex( (long)i, 0L );
54
55 return (number)n;
56}
int i
Definition cfEzgcd.cc:132

◆ ngcInitChar()

BOOLEAN ngcInitChar ( coeffs n,
void * parameter )

Initialize r (n_long_C)

Definition at line 560 of file gnumpc.cc.

561{
563 n->is_field=TRUE;
564 n->is_domain=TRUE;
565 n->rep=n_rep_gmp_complex;
566
567 n->cfKillChar = ngcKillChar;
568 n->ch = 0;
569 n->cfCoeffName=ngcCoeffName;
570 n->cfCoeffWrite = ngcCoeffWrite;
571
572 n->cfDelete = ngcDelete;
573 //n->cfNormalize=ndNormalize;
574 n->cfInit = ngcInit;
575 n->cfInitMPZ = ngcInitMPZ;
576 n->cfInt = ngcInt;
577 n->cfAdd = ngcAdd;
578 n->cfInpAdd = ngcInpAdd;
579 n->cfSub = ngcSub;
580 n->cfMult = ngcMult;
581 n->cfInpMult = ngcInpMult;
582 n->cfDiv = ngcDiv;
583 n->cfExactDiv= ngcDiv;
584 n->cfInpNeg = ngcNeg;
585 n->cfInvers = ngcInvers;
586 n->cfCopy = ngcCopy;
587 n->cfGreater = ngcGreater;
588 n->cfEqual = ngcEqual;
589 n->cfIsZero = ngcIsZero;
590 n->cfIsOne = ngcIsOne;
591 n->cfIsMOne = ngcIsMOne;
592 n->cfGreaterZero = ngcGreaterZero;
593 n->cfSize = ngcSize;
594
595 n->cfWriteLong = ngcWrite;
596 n->cfWriteShort = ngcWrite;
597
598 n->cfRead = ngcRead;
599 n->cfPower = ngcPower;
600 n->cfSetMap = ngcSetMap;
601 n->cfRePart = ngcRePart;
602 n->cfImPart = ngcImPart;
603 // cfSize = ndSize;
604#ifdef LDEBUG
605 n->cfDBTest = ngcDBTest; // not yet implemented: ngcDBTest
606#endif
607
608 n->nCoeffIsEqual = ngcCoeffIsEqual;
609
610 n->cfSetChar=ngcSetChar;
611
612/*
613 //r->cfInitChar=nlInitChar;
614 r->cfKillChar=NULL;
615
616 r->cfMult = nlMult;
617 r->cfSub = nlSub;
618 r->cfAdd = nlAdd;
619 r->cfDiv = nlDiv;
620 r->cfIntMod= nlIntMod;
621 r->cfExactDiv= nlExactDiv;
622 r->cfInit = nlInit;
623 r->cfSize = nlSize;
624 r->cfInt = nlInt;
625 r->cfDivComp = NULL; // only for ring stuff
626 r->cfIsUnit = NULL; // only for ring stuff
627 r->cfGetUnit = NULL; // only for ring stuff
628 r->cfExtGcd = NULL; // only for ring stuff
629 r->cfInpNeg = nlNeg;
630 r->cfInvers= nlInvers;
631 r->cfCopy = nl_Copy;
632 r->cfRePart = nl_Copy;
633 r->cfImPart = ndReturn0;
634 r->cfWriteLong = nlWrite;
635 r->cfRead = nlRead;
636 r->cfNormalize=nlNormalize;
637 r->cfGreater = nlGreater;
638 r->cfDivBy = NULL; // only for ring stuff
639 r->cfEqual = nlEqual;
640 r->cfIsZero = nlIsZero;
641 r->cfIsOne = nlIsOne;
642 r->cfIsMOne = nlIsMOne;
643 r->cfGreaterZero = nlGreaterZero;
644 r->cfPower = nlPower;
645 r->cfGetDenom = nlGetDenom;
646 r->cfGetNumerator = nlGetNumerator;
647 r->cfGcd = nlGcd;
648 r->cfLcm = nlLcm;
649 r->cfDelete= nlDelete;
650 r->cfSetMap = nlSetMap;
651 r->cfName = ndName;
652 r->cfInpMult=nlInpMult;
653#ifdef LDEBUG
654 // debug stuff
655 r->cfDBTest=nlDBTest;
656#endif
657
658 // the variables:
659 r->type = n_Q;
660 r->ch = 0;
661 r->has_simple_Alloc=FALSE;
662 r->has_simple_Inverse=FALSE;
663*/
664
665 n->iNumberOfParameters = 1;
666 n->cfParameter = ngcParameter;
667
668 char ** pParameterNames = (char **) omAlloc0(sizeof(char *));
669
670 if( parameter != NULL)
671 {
672 LongComplexInfo* p = (LongComplexInfo*)parameter;
673 pParameterNames[0] = omStrDup(p->par_name);
674 // fix wrong parameters:
675 if (p->float_len<SHORT_REAL_LENGTH) p->float_len=SHORT_REAL_LENGTH;
676 n->float_len = p->float_len;
677 n->float_len2 = p->float_len2;
678
679 } else // default values, just for testing!
680 {
681 pParameterNames[0] = omStrDup("i");
682 n->float_len = SHORT_REAL_LENGTH;
683 n->float_len2 = SHORT_REAL_LENGTH;
684 }
685
686 assume( pParameterNames != NULL );
687 assume( pParameterNames[0] != NULL );
688
689 n->pParameterNames = (const char**)pParameterNames;
690
691 // NOTE: n->complex_parameter was replaced by n_ParameterNames(n)[0]
692 // TODO: nfKillChar MUST destroy n->pParameterNames[0] (0-term. string) && n->pParameterNames (array of size 1)
693
694 return FALSE;
695}
@ n_rep_gmp_complex
(gmp_complex), see gnumpc.h
Definition coeffs.h:125
static void ngcKillChar(coeffs r)
Definition gnumpc.cc:406
static number ngcImPart(number a, const coeffs r)
Definition gnumpc.cc:265
static number ngcDiv(number a, number b, const coeffs r)
Definition gnumpc.cc:198
static void ngcDelete(number *a, const coeffs r)
Definition gnumpc.cc:93
static void ngcInpMult(number &a, number b, const coeffs R)
Definition gnumpc.cc:188
static BOOLEAN ngcDBTest(number, const char *, const int, const coeffs r)
Definition gnumpc.cc:27
static number ngcSub(number a, number b, const coeffs R)
Definition gnumpc.cc:169
static number ngcCopy(number a, const coeffs r)
Definition gnumpc.cc:107
static number ngcInvers(number a, const coeffs R)
Definition gnumpc.cc:131
static number ngcInitMPZ(mpz_t m, const coeffs)
Definition gnumpc.cc:521
void ngcSetChar(const coeffs r)
Definition gnumpc.cc:697
static void ngcPower(number x, int exp, number *u, const coeffs r)
Definition gnumpc.cc:215
static number ngcAdd(number a, number b, const coeffs R)
Definition gnumpc.cc:151
static nMapFunc ngcSetMap(const coeffs src, const coeffs dst)
Definition gnumpc.cc:529
static BOOLEAN ngcIsMOne(number a, const coeffs r)
Definition gnumpc.cc:324
static BOOLEAN ngcCoeffIsEqual(const coeffs r, n_coeffType n, void *parameter)
Definition gnumpc.cc:384
static BOOLEAN ngcGreaterZero(number a, const coeffs r)
Definition gnumpc.cc:276
static number ngcInit(long i, const coeffs r)
Definition gnumpc.cc:49
static number ngcRePart(number a, const coeffs r)
Definition gnumpc.cc:257
static void ngcCoeffWrite(const coeffs r, BOOLEAN)
Definition gnumpc.cc:427
static BOOLEAN ngcGreater(number a, number b, const coeffs r)
Definition gnumpc.cc:289
static number ngcParameter(int i, const coeffs r)
Definition gnumpc.cc:35
static void ngcWrite(number a, const coeffs r)
Definition gnumpc.cc:368
static int ngcSize(number n, const coeffs R)
Definition gnumpc.cc:75
static number ngcNeg(number a, const coeffs R)
Definition gnumpc.cc:119
static const char * ngcRead(const char *s, number *a, const coeffs r)
Definition gnumpc.cc:335
static BOOLEAN ngcIsZero(number a, const coeffs r)
Definition gnumpc.cc:68
static number ngcMult(number a, number b, const coeffs R)
Definition gnumpc.cc:180
static void ngcInpAdd(number &a, number b, const coeffs R)
Definition gnumpc.cc:159
static char * ngcCoeffName(const coeffs r)
Definition gnumpc.cc:419
static BOOLEAN ngcIsOne(number a, const coeffs r)
Definition gnumpc.cc:313
static long ngcInt(number &i, const coeffs r)
Definition gnumpc.cc:61
static BOOLEAN ngcEqual(number a, number b, const coeffs r)
Definition gnumpc.cc:301
#define omStrDup(s)
#define omAlloc0(size)

◆ ngcInitMPZ()

static number ngcInitMPZ ( mpz_t m,
const coeffs  )
static

Definition at line 521 of file gnumpc.cc.

522{
523 gmp_float mm(m);
524 gmp_complex* res = new gmp_complex(mm);
525 return (number)res;
526}
int m
Definition cfEzgcd.cc:128

◆ ngcInpAdd()

static void ngcInpAdd ( number & a,
number b,
const coeffs R )
static

Definition at line 159 of file gnumpc.cc.

160{
162
163 (*(gmp_complex*)a) += (*(gmp_complex*)b);
164}

◆ ngcInpMult()

static void ngcInpMult ( number & a,
number b,
const coeffs R )
static

Definition at line 188 of file gnumpc.cc.

189{
191
192 (*(gmp_complex*)a) *= (*(gmp_complex*)b);
193}

◆ ngcInt()

static long ngcInt ( number & i,
const coeffs r )
static

Definition at line 61 of file gnumpc.cc.

62{
64
65 return ((gmp_complex*)i)->real();
66}

◆ ngcInvers()

static number ngcInvers ( number a,
const coeffs R )
static

Definition at line 131 of file gnumpc.cc.

132{
134
135 gmp_complex* r = NULL;
136 if (((gmp_complex*)a)->isZero())
137 {
139 r = new gmp_complex( 0 );
140 }
141 else
142 {
143 r = new gmp_complex( (gmp_complex)1 / (*(gmp_complex*)a) );
144 }
145 return (number)r;
146}

◆ ngcIsMOne()

static BOOLEAN ngcIsMOne ( number a,
const coeffs r )
static

Definition at line 324 of file gnumpc.cc.

325{
327
328 return (((gmp_complex*)a)->real().isMOne() && ((gmp_complex*)a)->imag().isZero());
329 //return (((gmp_complex*)a)->real().isMOne());
330}

◆ ngcIsOne()

static BOOLEAN ngcIsOne ( number a,
const coeffs r )
static

Definition at line 313 of file gnumpc.cc.

314{
316
317 return (((gmp_complex*)a)->real().isOne() && ((gmp_complex*)a)->imag().isZero());
318 //return (((gmp_complex*)a)->real().isOne());
319}

◆ ngcIsZero()

static BOOLEAN ngcIsZero ( number a,
const coeffs r )
static

Definition at line 68 of file gnumpc.cc.

69{
71
72 return ( ((gmp_complex*)a)->real().isZero() && ((gmp_complex*)a)->imag().isZero());
73}

◆ ngcKillChar()

static void ngcKillChar ( coeffs r)
static

Definition at line 406 of file gnumpc.cc.

407{
408 char** p = (char**)n_ParameterNames(r);
409
410 const int P = n_NumberOfParameters(r);
411
412 for( int i = 1; i <= P; i++ )
413 if (p[i-1] != NULL)
414 omFree( (ADDRESS)p[i-1] );
415
416 omFreeSize((ADDRESS)p, P * sizeof(char*));
417}
void * ADDRESS
Definition auxiliary.h:120
static FORCE_INLINE int n_NumberOfParameters(const coeffs r)
Returns the number of parameters.
Definition coeffs.h:767
#define omFreeSize(addr, size)
#define omFree(addr)

◆ ngcMapLongR()

static number ngcMapLongR ( number from,
const coeffs aRing,
const coeffs r )
static

Definition at line 468 of file gnumpc.cc.

469{
471 assume( getCoeffType(aRing) == n_long_R );
472
473 if ( from != NULL )
474 {
475 gmp_complex *res=new gmp_complex(*((gmp_float *)from));
476 return (number)res;
477 }
478 else
479 return NULL;
480}
@ n_long_R
real floating point (GMP) numbers
Definition coeffs.h:33

◆ ngcMapP()

static number ngcMapP ( number from,
const coeffs aRing,
const coeffs r )
static

Definition at line 496 of file gnumpc.cc.

497{
499 assume( getCoeffType(aRing) == n_Zp );
500
501 if ( from != NULL )
502 return ngcInit(npInt(from, aRing), r); // FIXME? TODO? // extern int npInt (number &n, const coeffs r);
503 else
504 return NULL;
505}
@ n_Zp
\F{p < 2^31}
Definition coeffs.h:29
long npInt(number &n, const coeffs r)
Definition modulop.cc:83

◆ ngcMapQ()

static number ngcMapQ ( number from,
const coeffs aRing,
const coeffs r )
static

Definition at line 433 of file gnumpc.cc.

434{
436 assume( aRing->rep == n_rep_gap_rat);
437
438 if ( from != NULL )
439 {
441 return (number)res;
442 }
443 else
444 return NULL;
445}
@ n_rep_gap_rat
(number), see longrat.h
Definition coeffs.h:118
gmp_float numberFieldToFloat(number num, int cf)
#define QTOF
Definition mpr_complex.h:19

◆ ngcMapR()

static number ngcMapR ( number from,
const coeffs aRing,
const coeffs r )
static

Definition at line 482 of file gnumpc.cc.

483{
485 assume( getCoeffType(aRing) == n_R );
486
487 if ( from != NULL )
488 {
489 gmp_complex *res=new gmp_complex((double)nrFloat(from));
490 return (number)res;
491 }
492 else
493 return NULL;
494}
@ n_R
single prescision (6,6) real numbers
Definition coeffs.h:31
SI_FLOAT nrFloat(number n)
Converts a n_R number into a float. Needed by Maps.
Definition shortfl.cc:48

◆ ngcMapZ()

static number ngcMapZ ( number from,
const coeffs aRing,
const coeffs r )
static

Definition at line 447 of file gnumpc.cc.

448{
450 assume( aRing->rep == n_rep_gap_gmp);
451
452 if ( from != NULL )
453 {
454 if (SR_HDL(from) & SR_INT)
455 {
456 gmp_float f_i= gmp_float(SR_TO_INT(from));
457 gmp_complex *res=new gmp_complex(f_i);
458 return (number)res;
459 }
460 gmp_float f_i=(mpz_ptr)from;
461 gmp_complex *res=new gmp_complex(f_i);
462 return (number)res;
463 }
464 else
465 return NULL;
466}
@ n_rep_gap_gmp
(), see rinteger.h, new impl.
Definition coeffs.h:119
#define SR_INT
Definition longrat.h:67
#define SR_TO_INT(SR)
Definition longrat.h:69
#define SR_HDL(A)
Definition tgb.cc:35

◆ ngcMult()

static number ngcMult ( number a,
number b,
const coeffs R )
static

Definition at line 180 of file gnumpc.cc.

181{
183
184 gmp_complex* r= new gmp_complex( (*(gmp_complex*)a) * (*(gmp_complex*)b) );
185 return (number)r;
186}

◆ ngcNeg()

static number ngcNeg ( number a,
const coeffs R )
static

Definition at line 119 of file gnumpc.cc.

120{
122
124 (*r).neg();
125 return (number)a;
126}
gmp_complex & neg()

◆ ngcParameter()

static number ngcParameter ( int i,
const coeffs r )
static

Definition at line 35 of file gnumpc.cc.

36{
38 assume(i==1);
39
40 if( i == 1 )
41 return (number)(new gmp_complex( 0L, 1L ));
42
43 return NULL; // new gmp_complex( ) // 0?
44}

◆ ngcPower()

static void ngcPower ( number x,
int exp,
number * u,
const coeffs r )
static

Definition at line 215 of file gnumpc.cc.

216{
218
219 if ( exp == 0 )
220 {
221 gmp_complex* n = new gmp_complex(1);
222 *u=(number)n;
223 return;
224 }
225 else if ( exp == 1 )
226 {
227 gmp_complex* n = new gmp_complex();
228 *n= *(gmp_complex*)x;
229 *u=(number)n;
230 return;
231 }
232 else if (exp == 2)
233 {
234 gmp_complex* n = new gmp_complex();
235 *n= *(gmp_complex*)x;
236 *u=(number)n;
237 *(gmp_complex*)(*u) *= *(gmp_complex*)n;
238 return;
239 }
240 if ( (exp & 1) == 1 )
241 {
242 ngcPower(x,exp-1,u, r);
243 gmp_complex *n = new gmp_complex();
244 *n=*(gmp_complex*)x;
245 *(gmp_complex*)(*u) *= *(gmp_complex*)n;
246 delete n;
247 }
248 else
249 {
250 number w=NULL;
251 ngcPower(x,exp/2,&w, r);
252 ngcPower(w,2,u, r);
253 n_Delete(&w, r);
254 }
255}
Variable x
Definition cfModGcd.cc:4090
static FORCE_INLINE void n_Delete(number *p, const coeffs r)
delete 'p'
Definition coeffs.h:459
const CanonicalForm & w
Definition facAbsFact.cc:51
gmp_float exp(const gmp_float &a)

◆ ngcRead()

static const char * ngcRead ( const char * s,
number * a,
const coeffs r )
static

Definition at line 335 of file gnumpc.cc.

336{
338 const char * const complex_parameter = n_ParameterNames(r)[0];
339 assume( complex_parameter != NULL );
340 const int N = strlen(complex_parameter);
341
342 if ((*s >= '0') && (*s <= '9'))
343 {
344 gmp_float *re=NULL;
345 s=ngfRead(s,(number *)&re, r); // FIXME? TODO? // extern const char * ngfRead (const char *s, number *a, const coeffs r);
346 gmp_complex *aa=new gmp_complex(*re);
347 *a=(number)aa;
348 delete re;
349 }
350 else if (strncmp(s, complex_parameter, N)==0)
351 {
352 s += N;
353 gmp_complex *aa=new gmp_complex(0L,1L);
354 *a=(number)aa;
355 }
356 else
357 {
358 *a=(number) new gmp_complex(1L);
359 }
360 return s;
361}
const CanonicalForm CFMap CFMap & N
Definition cfEzgcd.cc:56
const CanonicalForm int s
Definition facAbsFact.cc:51
const char * ngfRead(const char *start, number *a, const coeffs r)
Definition gnumpfl.cc:324

◆ ngcRePart()

static number ngcRePart ( number a,
const coeffs r )
static

Definition at line 257 of file gnumpc.cc.

258{
260
261 gmp_complex* n = new gmp_complex(((gmp_complex*)a)->real());
262 return (number)n;
263}

◆ ngcSetChar()

void ngcSetChar ( const coeffs r)

Definition at line 697 of file gnumpc.cc.

698{
699 setGMPFloatDigits(r->float_len, r->float_len2);
700}
void setGMPFloatDigits(size_t digits, size_t rest)
Set size of mantissa digits - the number of output digits (basis 10) the size of mantissa consists of...

◆ ngcSetMap()

static nMapFunc ngcSetMap ( const coeffs src,
const coeffs dst )
static

Definition at line 529 of file gnumpc.cc.

530{
531 assume( getCoeffType(dst) == n_long_C );
532
533 if (src->rep==n_rep_gap_rat) /* Q, Z*/
534 {
535 return ngcMapQ;
536 }
537 if (src->rep==n_rep_gap_gmp) /* Z */
538 {
539 return ngcMapZ;
540 }
541 if ((src->rep==n_rep_gmp_float) && nCoeff_is_long_R(src))
542 {
543 return ngcMapLongR;
544 }
545 if ((src->rep==n_rep_gmp_complex) && nCoeff_is_long_C(src))
546 {
547 return ngcCopyMap;
548 }
549 if ((src->rep==n_rep_float) && nCoeff_is_R(src))
550 {
551 return ngcMapR;
552 }
553 if ((src->rep==n_rep_int) && nCoeff_is_Zp(src))
554 {
555 return ngcMapP;
556 }
557 return NULL;
558}
static FORCE_INLINE BOOLEAN nCoeff_is_long_R(const coeffs r)
Definition coeffs.h:884
static FORCE_INLINE BOOLEAN nCoeff_is_Zp(const coeffs r)
Definition coeffs.h:793
@ n_rep_float
(float), see shortfl.h
Definition coeffs.h:123
@ n_rep_int
(int), see modulop.h
Definition coeffs.h:117
@ n_rep_gmp_float
(gmp_float), see
Definition coeffs.h:124
static FORCE_INLINE BOOLEAN nCoeff_is_R(const coeffs r)
Definition coeffs.h:829
static FORCE_INLINE BOOLEAN nCoeff_is_long_C(const coeffs r)
Definition coeffs.h:887
static number ngcMapQ(number from, const coeffs aRing, const coeffs r)
Definition gnumpc.cc:433
static number ngcMapP(number from, const coeffs aRing, const coeffs r)
Definition gnumpc.cc:496
static number ngcCopyMap(number from, const coeffs aRing, const coeffs r)
Definition gnumpc.cc:507
static number ngcMapZ(number from, const coeffs aRing, const coeffs r)
Definition gnumpc.cc:447
static number ngcMapLongR(number from, const coeffs aRing, const coeffs r)
Definition gnumpc.cc:468
static number ngcMapR(number from, const coeffs aRing, const coeffs r)
Definition gnumpc.cc:482

◆ ngcSize()

static int ngcSize ( number n,
const coeffs R )
static

Definition at line 75 of file gnumpc.cc.

76{
77 int r = (int)((gmp_complex*)n)->real();
78 if (r < 0) r = -r;
79 int i = (int)((gmp_complex*)n)->imag();
80 if (i < 0) i = -i;
81 int oneNorm = r + i;
82 /* basically return the 1-norm of n;
83 only if this happens to be zero although n != 0,
84 return 1;
85 (this code ensures that zero has the size zero) */
86 if ((oneNorm == 0.0) & (ngcIsZero(n,R) == FALSE)) oneNorm = 1;
87 return oneNorm;
88}
static CanonicalForm oneNorm(const CanonicalForm &F)

◆ ngcSub()

static number ngcSub ( number a,
number b,
const coeffs R )
static

Definition at line 169 of file gnumpc.cc.

170{
172
173 gmp_complex* r= new gmp_complex( (*(gmp_complex*)a) - (*(gmp_complex*)b) );
174 return (number)r;
175}

◆ ngcWrite()

static void ngcWrite ( number a,
const coeffs r )
static

Definition at line 368 of file gnumpc.cc.

369{
371
372 if (a==NULL)
373 StringAppendS("0");
374 else
375 {
376 char *out;
377 out= complexToStr(*(gmp_complex*)a, r->float_len, r);
378 StringAppendS(out);
379 // omFreeSize((void *)out, (strlen(out)+1)* sizeof(char) );
380 omFree( (void *)out );
381 }
382}
char * complexToStr(gmp_complex &c, const unsigned int oprec, const coeffs src)
void StringAppendS(const char *st)
Definition reporter.cc:107