must be even and bn must be odd */
pgpAssert((bnLSWord(step) & 1) == 0);
pgpAssert((bnLSWord(bn) & 1) == 1);
bnBegin(&a, bn->mgr, isSecure);
bnBegin(&e, bn->mgr, isSecure);
for (;;) {
if (sieveBuildBig(sieve, SIEVE, bn, step, 0) < 0)
goto failed;
p = prev = 0;
if (sieve[0] & 1 || (p = sieveSearch(sieve, SIEVE, p)) != 0) {
do {
/*
* Adjust bn to have the right value,
* adding (p-prev) * 2*step.
*/
pgpAssert(p >= prev);
/* Compute delta into a */
if (bnMulQ(&a, step, p-prev) < 0)
goto failed;
if (bnAdd(bn, &a) < 0)
goto failed;
prev = p;
retval = primeTest(bn, &e, &a, f, arg);
if (retval <= 0)
goto done; /* Success! */
modexps += retval;
if (f && (retval = f(arg, '.')) < 0)
goto done;
/* And try again */
p = sieveSearch(sieve, SIEVE, p);
} while (p);
}
/* Ran out of sieve space - increase bn and keep trying. */
#if SIEVE*8 == 65536
/* Corner case that will never actually happen */
if (!prev) {
if (bnAdd(bn, step) < 0)
goto failed;
p = 65535;
} else {
p = (unsigned)(SIEVE*8 - prev);
}
#else
p = SIEVE*8 - prev;
#endif
if (bnMulQ(&a, step, p) < 0 || bnAdd(bn, &a) < 0)
goto failed;
if (f && (retval = f(arg, '/')) < 0)
goto done;
} /* for (;;) */
failed:
retval = -1;
done:
bnEnd(&e);
bnEnd(&a);
#ifdef MSDOS
bniMemFree(sieve, SIEVE);
#else
bniMemWipe(sieve, sizeof(sieve));
#endif
return retval < 0 ? retval : modexps + CONFIRMTESTS;
}
ize="12" subscript="false" superscript="false" underline="false"/>
>5)
#define PPC_MFTB(d) PPC_TYPE31(371,d,12,8)
#define PPC_MFTBU(d) PPC_TYPE31(371,d,13,8)
#define PPC_MTCRF(mask,s) PPC_TYPE31(144,s,0,(mask)&0xff)
#define PPC_MTSPR(s,spr) PPC_TYPE31(467,s,(spr)&31,(spr)>>5)
#define PPC_MULHW(d,a,b) PPC_TYPE31(75,d,a,b)
#define PPC_MULHW_(d,a,b) PPC_TYPE31(75,d,a,b)|PPC_RC
#define PPC_MULHWU(d,a,b) PPC_TYPE31(11,d,a,b)
#define PPC_MULHWU_(d,a,b) PPC_TYPE31(11,d,a,b)|PPC_RC
#define PPC_MULLW(d,a,b) PPC_TYPE31(235,d,a,b)
#define PPC_MULLW_(d,a,b) PPC_TYPE31(235,d,a,b)|PPC_RC
#define PPC_MULLWO(d,a,b) PPC_TYPE31(235,d,a,b)|PPC_OE
#define PPC_MULLWO_(d,a,b) PPC_TYPE31(235,d,a,b)|PPC_OE|PPC_RC
#define PPC_NAND(a,s,b) PPC_TYPE31(476,s,a,b)
#define PPC_NAND_(a,s,b) PPC_TYPE31(476,s,a,b)|PPC_RC
#define PPC_NEG(d,a) PPC_TYPE31(104,d,a,b)
#define PPC_NEG_(d,a) PPC_TYPE31(104,d,a,b)|PPC_RC
#define PPC_NEGO(d,a) PPC_TYPE31(104,d,a,b)|PPC_OE
#define PPC_NEGO_(d,a) PPC_TYPE31(104,d,a,b)|PPC_OE|PPC_RC
#define PPC_NOR(a,s,b) PPC_TYPE31(124,s,a,b)
#define PPC_NOR_(a,s,b) PPC_TYPE31(124,s,a,b)|PPC_RC
#define PPC_OR(a,s,b) PPC_TYPE31(444,s,a,b)
#define PPC_OR_(a,s,b) PPC_TYPE31(444,s,a,b)|PPC_RC
#define PPC_ORC(a,s,b) PPC_TYPE31(412,s,a,b)
#define PPC_ORC_(a,s,b) PPC_TYPE31(412,s,a,b)|PPC_RC
#define PPC_SLW(a,s,b) PPC_TYPE31(24,s,a,b)
#define PPC_SLW_(a,s,b) PPC_TYPE31(24,s,a,b)|PPC_RC
#define PPC_SRAW(a,s,b) PPC_TYPE31(792,s,a,b)
#define PPC_SRAW_(a,s,b) PPC_TYPE31(792,s,a,b)|PPC_RC
#define PPC_SRAWI(a,s,sh) PPC_TYPE31(824,s,a,sh)
#define PPC_SRAWI_(a,s,sh) PPC_TYPE31(824,s,a,sh)|PPC_RC
#define PPC_SRW(a,s,b) PPC_TYPE31(536,s,a,b)
#define PPC_SRW_(a,s,b) PPC_TYPE31(536,s,a,b)|PPC_RC
#define PPC_STBUX(s,a,b) PPC_TYPE31(247,s,a,b)
#define PPC_STBX(s,a,b) PPC_TYPE31(215,s,a,b)
#define PPC_STHBRX(s,a,b) PPC_TYPE31(918,s,a,b)
#define PPC_STHUX(s,a,b) PPC_TYPE31(439,s,a,b)
#define PPC_STHX(s,a,b) PPC_TYPE31(407,s,a,b)
#define PPC_STSWI(s,a,nb) PPC_TYPE31(725,s,a,nb)
#define PPC_STSWX(s,a,b) PPC_TYPE31(661,s,a,b)
#define PPC_STWBRX(s,a,b) PPC_TYPE31(662,s,a,b)
#define PPC_STWCX_(s,a,b) PPC_TYPE31(150,s,a,b)|PPC_RC
#define PPC_STWUX(s,a,b) PPC_TYPE31(183,s,a,b)
#define PPC_STWX(s,a,b) PPC_TYPE31(151,s,a,b)
#define PPC_SUBF(d,a,b) PPC_TYPE31(40,d,a,b)
#define PPC_SUBF_(d,a,b) PPC_TYPE31(40,d,a,b)|PPC_RC
#define PPC_SUBFO(d,a,b) PPC_TYPE31(40,d,a,b)|PPC_OE
#define PPC_SUBFO_(d,a,b) PPC_TYPE31(40,d,a,b)|PPC_OE|PPC_RC
#define PPC_SUB(d,b,a) PPC_SUBF(d,a,b)
#define PPC_SUB_(d,b,a) PPC_SUBF_(d,a,b)
#define PPC_SUBO(d,b,a) PPC_SUBFO(d,a,b)
#define PPC_SUBO_(d,b,a) PPC_SUBFO_(d,a,b)
#define PPC_SUBFC(d,a,b) PPC_TYPE31(8,d,a,b)
#define PPC_SUBFC_(d,a,b) PPC_TYPE31(8,d,a,b)|PPC_RC
#define PPC_SUBFCO(d,a,b) PPC_TYPE31(8,d,a,b)|PPC_OE
#define PPC_SUBFCO_(d,a,b) PPC_TYPE31(8,d,a,b)|PPC_OE|PPC_RC
#define PPC_SUBFE(d,a,b) PPC_TYPE31(136,d,a,b)
#define PPC_SUBFE_(d,a,b) PPC_TYPE31(136,d,a,b)|PPC_RC
#define PPC_SUBFEO(d,a,b) PPC_TYPE31(136,d,a,b)|PPC_OE
#define PPC_SUBFEO_(d,a,b) PPC_TYPE31(136,d,a,b)|PPC_OE|PPC_RC
#define PPC_SUBFME(d,a) PPC_TYPE31(232,d,a,0)
#define PPC_SUBFME_(d,a) PPC_TYPE31(232,d,a,0)|PPC_RC
#define PPC_SUBFMEO(d,a) PPC_TYPE31(232,d,a,0)|PPC_OE
#define PPC_SUBFMEO_(d,a) PPC_TYPE31(232,d,a,0)|PPC_OE|PPC_RC
#define PPC_SUBFZE(d,a) PPC_TYPE31(200,d,a,0)
#define PPC_SUBFZE_(d,a) PPC_TYPE31(200,d,a,0)|PPC_RC
#define PPC_SUBFZEO(d,a) PPC_TYPE31(200,d,a,0)|PPC_OE
#define PPC_SUBFZEO_(d,a) PPC_TYPE31(200,d,a,0)|PPC_OE|PPC_RC
#define PPC_SYNC() PPC_TYPE31(598,0,0,0)
#define PPC_TW(to,a,b) PPC_TYPE31(4,to,a,b)
#define PPC_XOR(a,s,b) PPC_TYPE31(316,s,a,b)
/* Immediate-operand instructions. Take a 16-bit immediate operand */
#define PPC_IMM(major,d,a,imm) \
PPC_MAJOR(major)|PPC_DEST(d)|PPC_SRCA(a)|((imm)&0xffff)
/* Trap word immediate */
#define PPV_TWI(to,a,simm) PPC_IMM(3,to,a,simm)
/* Integer arithmetic */
#define PPC_MULLI(d,a,simm) PPC_IMM(7,d,a,simm)
#define PPC_SUBFIC(s,a,simm) PPC_IMM(8,s,a,simm)
#define PPC_CMPLI(cr,a,uimm) PPC_IMM(10,(cr)<<2,a,uimm)
#define PPC_CMPI(cr,a,simm) PPC_IMM(11,(cr)<<2,a,simm)
#define PPC_ADDIC(d,a,simm) PPC_IMM(12,d,a,simm)
#define PPC_ADDIC_(d,a,simm) PPC_IMM(13,d,a,simm)
#define PPC_ADDI(d,a,simm) PPC_IMM(14,d,a,simm)
#define PPC_ADDIS(d,a,simm) PPC_IMM(15,d,a,simm)
/* Conditional branch (dest is 16 bits, +/- 2^15 bytes) */
#define PPC_BC(bo,bi,dest) PPC_IMM(16,bo,bi,((dest)<<2)&0xfffc)
#define PPC_BCA(bo,bi,dest) PPC_BC(bo,bi,dest)|PPC_AA
#define PPC_BCL(bo,bi,dest) PPC_BC(bo,bi,dest)|PPC_LK
#define PPC_BCLA(bo,bi,dest) PPC_BC(bo,bi,dest)|PPC_AA|PPC_LK
/* Logical operations */
#define PPC_ORI(a,s,uimm) PPC_IMM(24,s,a,uimm)
#define PPC_ORIS(a,s,uimm) PPC_IMM(25,s,a,uimm)
#define PPC_XORI(a,s,uimm) PPC_IMM(26,s,a,uimm)
#define PPC_XORIS(a,s,uimm) PPC_IMM(27,s,a,uimm)
#define PPC_ANDI_(a,s,uimm) PPC_IMM(28,s,a,uimm)
#define PPC_ANDIS(a,s,uimm) PPC_IMM(29,s,a,uimm)
/* Load/store */
#define PPC_LWZ(d,a,simm) PPC_IMM(32,d,a,simm)
#define PPC_LWZU(d,a,simm) PPC_IMM(33,d,a,simm)
#define PPC_LBZ(d,a,simm) PPC_IMM(34,d,a,simm)
#define PPC_LBZU(d,a,simm) PPC_IMM(35,d,a,simm)
#define PPC_STW(s,a,simm) PPC_IMM(36,s,a,simm)
#define PPC_STWU(s,a,simm) PPC_IMM(37,s,a,simm)
#define PPC_STB(s,a,simm) PPC_IMM(38,s,a,simm)
#define PPC_STBU(s,a,simm) PPC_IMM(39,s,a,simm)
#define PPC_LHZ(d,a,simm) PPC_IMM(40,d,a,simm)
#define PPC_LHZU(d,a,simm) PPC_IMM(41,d,a,simm)
#define PPC_LHA(d,a,simm) PPC_IMM(42,d,a,simm)
#define PPC_STH(s,a,simm) PPC_IMM(44,s,a,simm)
#define PPC_STHU(s,a,simm) PPC_IMM(45,s,a,simm)
#define PPC_LHAU(d,a,simm) PPC_IMM(43,d,a,simm)
#define PPC_LMW(d,a,simm) PPC_IMM(46,d,a,simm)
#define PPC_STMW(s,a,simm) PPC_IMM(47,s,a,simm)
/* Major number = 19 - condition register operations. d, a and b are CR bits*/
#define PPC_TYPE19(minor,d,a,b) \
PPC_MAJOR(19)|PPC_DEST(d)|PPC_SRCA(a)|PPC_SRCB(b)|PPC_MINOR(minor)
#define PPC_MCRF(d,s) PPC_TYPE19(0,(d)<<2,(s)<<2,0)
#define PPC_CRNOR(d,a,b) PPC_TYPE19(33,d,a,b)
#define PPC_CRANDC(d,a,b) PPC_TYPE19(129,d,a,b)
#define PPC_CRXOR(d,a,b) PPC_TYPE19(193,d,a,b)
#define PPC_CRNAND(d,a,b) PPC_TYPE19(225,d,a,b)
#define PPC_CRAND(d,a,b) PPC_TYPE19(257,d,a,b)
#define PPC_CREQV(d,a,b) PPC_TYPE19(289,d,a,b)
#define PPC_CRORC(d,a,b) PPC_TYPE19(417,d,a,b)
#define PPC_CROR(d,a,b) PPC_TYPE19(449,d,a,b)
/* Indirect conditional branch */
#define PPC_BCLR(bo,bi) PPC_TYPE19(16,bo,bi,0)
#define PPC_BCLRL(bo,bi) PPC_TYPE19(16,bo,bi,0)|PPC_LK
#define PPC_BCCTR(bo,bi) PPC_TYPE19(528,bo,bi,0)
#define PPC_BCCTRL(bo,bi) PPC_TYPE19(528,bo,bi,0)|PPC_LK
#define PPC_BLR() PPC_BCLR(20,31)
#define PPC_BCTR() PPC_BCCTR(20,31)
/* Other */
#define PPC_RLWIMI(a,s,sh,mb,me) \
PPC_MAJOR(20)|PPC_DEST(s)|PPC_SRCA(A)|PPC_SRCB(sh)|(mb)<<6|(me)<<1
#define PPC_RLWIMI_(a,s,sh,mb,me) PPC_RLWIMI(a,s,sh,mb,me)|PPC_RC
#define PPC_RLWINM(a,s,sh,mb,me) \
PPC_MAJOR(21)|PPC_DEST(s)|PPC_SRCA(A)|PPC_SRCB(sh)|(mb)<<6|(me)<<1
#define PPC_RLWINM_(a,s,sh,mb,me) PPC_RLWINM(a,s,sh,mb,me)|PPC_RC
#define PPC_RLWNM(a,s,b,mb,me) \
PPC_MAJOR(23)|PPC_DEST(s)|PPC_SRCA(A)|PPC_SRCB(b)|(mb)<<6|(me)<<1
#define PPC_RLWNM_(a,s,b,mb,me) PPC_RLWNM(a,s,b,mb,me)|PPC_RC
#define PPC_SC() PPC_MAJOR(17)|2
/* Major number = 63 Floating-point operations (not implemented for now) */
/* Simplified Mnemonics */
/* Fabricate immediate subtract out of add negative */
#define PPC_SUBI(d,a,simm) PPC_ADDI(d,a,-(simm))
#define PPC_SUBIS(d,a,simm) PPC_ADDIS(d,a,-(simm))
#define PPC_SUBIC(d,a,simm) PPC_ADDIC(d,a,-(simm))
#define PPC_SUBIC_(d,a,simm) PPC_ADDIC_(d,a,-(simm))
/* Fabricate subtract out of subtract from */
#define PPC_SUBC(d,b,a) PPC_SUBFC(d,a,b)
#define PPC_SUBC_(d,b,a) PPC_SUBFC_(d,a,b)
#define PPC_SUBCO(d,b,a) PPC_SUBFCO(d,a,b)
#define PPC_SUBCO_(d,b,a) PPC_SUBFCO_(d,a,b)
/* Messy compare bits omitted */
/* Shift and rotate omitted */
/* Branch coding omitted */
#define PPC_CRSET(d) PPC_CREQV(d,d,d)
#define PPC_CRCLR(d) PPC_CRXOR(d,d,d)
#define PPC_CRMOVE(d,s) PPC_CROR(d,s,s)
#define PPC_CRNOT(d,s) PPC_CRNOR(d,s,s)
/* Trap menmonics omitted */
/* Menmonics for user-accessible SPRs */
#define PPC_MFXER(d) PPC_MFSPR(d,1)
#define PPC_MFLR(d) PPC_MFSPR(d,8)
#define PPC_MFCTR(d) PPC_MFSPR(d,9)
#define PPC_MTXER(s) PPC_MTSPR(s,1)
#define PPC_MTLR(s) PPC_MTSPR(s,8)
#define PPC_MTCTR(s) PPC_MTSPR(s,9)
/* Recommended mnemonics */
#define PPC_NOP() PPC_ORI(0,0,0)
#define PPC_LI(d,simm) PPC_ADDI(d,0,simm)
#define PPC_LIS(d,simm) PPC_ADDIS(d,0,simm)
#define PPC_LA(d,a,simm) PPC_ADDI(d,a,simm)
#define PPC_MR(d,s) PPC_OR(d,s,s)
#define PPC_NOT(d,s) PPC_NOR(d,s,s)
#define PPC_MTCR(s) PPC_MTCRF(0xff,s)
#endif /* Included_bnppcasm_h */
/* 45678901234567890123456789012345678901234567890123456789012345678901234567*/
9zRzYkJSpwcm90ZWN0ZWRHSShfc3lzbGliRzYiNiNJInZHRic=
The material above can be cut and pasted into a new execution group to work with any functions f and g we choose to define.
We also want to look at a diagram that we will use when we generalize to a chain rule in several variables. We can think of variables as points and line segments as derivatives of the functions that connect the points. The chain rule says that the longer path is obtained by multiplying the derivatives connected to the segments.
VVRNZDxRQm07dkk7SU5rQ0NnUj1JQls/VFJbRGhDZUd1cj1LRks/VU5rQ2NnVEVpQl1HdFJdRGhDaVd1c0FbRkxDZU5tQ0NnVk1JQ19PVFNfVGhDZWd1dEVrRk1HdU5tQ2NnWFVpQ2FTRHFhSWhhY1h1VUJ5dkdHR1dtcnR3VltHU2FtR3RhQnhlZUNhdU1LR09BVT1HdVZrVD5pRGVrcnRVZFQ9aUR1V0I9Q1BPVV1NVU9XVmZtVGVpSExDVGRFU1ZVV1I9Q0xRRWtRR0FfU3JlVWR3dFVpRGg9Y2VzaU47WEpHRkhvQ0M/ZlpdQ0FTVlNFdGJtclREb1o9UGdxdm9NTEBJcUVFdl09WXZdc2xMSnNETkh4V1RkT1Zka3NwbjtNV29QTldwdWtwd2l1dHNoVWFVcFhxc3dZcFV5dXBUVUBVeFNkTT1YeXlwdXRRSzpZdkVEUTxNWERgcmZcXGpmbFhtaVFdTHFqWExZQHRxcVQ9YFVzPUtCZXBTeHNzYFVodVBVVVRVWVFFYUpaQXhkXXlKcXJhUW5GZFZtSU54bHRvWXJRRVFdbVlFeFViTG1NTVlEUXVKUVJQTGpWPXRgQVhITXdRXFxKS1R4dUFMQmlPTEVXW1xcamZlT2NQU0pNUlBWYko+ckpOZT1Ba0xwclBvbGtgWnNGWk4+cGpAXmdgW2JPXTx4cnNwZ1VvXUFJcEZZaWpZZlpGdDtWZUZecl9Gb1lpXWdQZk1OeURHXkhAbmBxckVuY1xccWhmWGBiRl1V/*____________________________________________________________________________
Copyright (C) 2002 PGP Corporation
All rights reserved.
$Id: bnprint.c,v 1.3 2002/08/06 20:10:57 dallen Exp $
____________________________________________________________________________*/
/*
* bnprint.c - Print a bignum, for debugging purposes.
*
* Written by Colin Plumb.
*
*/
#include "pgpConfig.h"
#include "pgpMem.h"
/*
* Some compilers complain about #if FOO if FOO isn't defined,
* so do the ANSI-mandated thing explicitly...
*/
#ifndef NO_STRING_H
#define NO_STRING_H 0
#endif
#ifndef HAVE_STRINGS_H
#define HAVE_STRINGS_H 0
#endif
#include
#if !NO_STRING_H
#include
#elif HAVE_STRINGS_H
#include
#endif
#include "bn.h"
#include "bnprint.h"
#include "bnkludge.h"
int
bnPrint(FILE *f, char const *prefix, BigNum const *bn,
char const *suffix)
{
unsigned char temp[32]; /* How much to print on one line */
unsigned len;
size_t i;
if (prefix && fputs(prefix, f) < 0)
return EOF;
len = (bnBits(bn) + 7)/ 8;
if (!len) {
if (putc('0', f) < 0)
return EOF;
} else {
while (len > sizeof(temp)) {
len -= sizeof(temp);
bnExtractBigBytes(bn, temp, len, sizeof(temp));
for (i = 0; i < sizeof(temp); i++)
if (fprintf(f, "%02X", temp[i]) < 0)
return EOF;
if (putc('\\', f) < 0 || putc('\n', f) < 0)
return EOF;
if (prefix) {
i = strlen(prefix);
while (i--)
if (putc(' ', f) < 0)
return EOF;
}
}
bnExtractBigBytes(bn, temp, 0, len);
for (i = 0; i < len; i++)
if (fprintf(f, "%02X", temp[i]) < 0)
return EOF;
}
return suffix ? fputs(suffix, f) : 0;
}
int
bnPrint10(FILE *f, char const *prefix, BigNum const *bn,
char const *suffix)
{
BigNum pbig, pbig1;
BigNum ten, zero, rem;
char buf[3000]; /* up to 9000 bits */
int bufi = sizeof(buf)-1;
int n;
buf[bufi] = '\0';
bnBegin (&pbig, bn->mgr, bn->isSecure );
bnBegin (&pbig1, bn->mgr, bn->isSecure );
bnBegin (&rem, bn->mgr, bn->isSecure );
bnBegin (&ten, bn->mgr, bn->isSecure );
bnAddQ (&ten, 10);
bnBegin (&zero, bn->mgr, bn->isSecure );
bnCopy (&pbig, bn);
while (bnCmp (&pbig, &zero) != 0) {
bnDivMod (&pbig1, &rem, &pbig, &ten);
bnCopy (&pbig, &pbig1);
n = bnLSWord (&rem);
buf[--bufi] = n + '0';
}
bnEnd (&pbig);
bnEnd (&pbig1);
bnEnd (&rem);
if (prefix && fputs(prefix, f) < 0)
return EOF;
fputs (buf+bufi, f);
pgpClearMemory (buf, sizeof(buf));
return suffix ? fputs(suffix, f) : 0;
}
c2R3V2JqUVRAT2Y9bVlXU2I8QXJsP0hXR2JnT2Ruc1h2S1h2YVVFa2hVb1VKS3ZUS0NvTUZlV0ZzbUVmTUNIdVlcXEVjbENTVVNmZkNZXkVzUm10QnF5amd1S2NFdnF2YndHWFlYQ3NHQklJbW13YT9FeVNmdVtzeXVjb2tWW0l3cmNWWlVUdEtHVVlCUk1TTVNSUk1DP19zW11kRVNHOmlzO3FEV0tmYl1XbGdDYWF1aj9HWUNVbz9JY09UZFVUQHdEdFNVU1liUHljSUVVanNHc19WcjtFPGFUZ1FzP3N1WWlXYHhzYExNc2VWc3FUbDxyPUxPXkVVaz1XO2hKXmByTml5SnBuO3FvS0hMTz1Wb2lMVURWOkBMa1xcdXlUbGBZS01lVWtFbmh0S0A9V3NwUkVdcEBtTj1dbk5JWXJYeHRcXFFbSFB5aHBhZVNIbU8/cG9GUFRYSWxGdVNmWXlhWXFCRVNrRG1HZVA6RG5kbVA8cWw+V1tpQG9ecXFtVnN0d209d2BMPl9ISW1idnlOb2haT2puUGNASG5gYXk7RlpHZmxkYHddd2VuQEBLUlNLRVJVU1RnYmlZRGFRWT9taD5lRW9LQ1lzd2ZfR3A7QmVDU1FhYkRJdztvR1xcd0luO1ZSV3hHW3ZGaUhpYXlsQXVVT0NdU1dJZWNbPUleZ3d0ZXZYZXdKZUZWPXNVS3hmPXg6ZUJHX3ZEQUJUY3luUWJvW0NDY1Joa2hGVVJLU1RWQXJYPUllR3ZCc1lKU0VcXEtCWnlDclxcXVBmW0FeajxbXmtBRmJYR3hqXmpQV15KRmBAUWZbeFp1aHFpeVxcSkBiUmBzYEFgYGhjVUZhVHBzbEdmRE9gV29ac15zRm9mbWBdYD5nZT9cXEhRZms/eUxudHY/W1pYYWJZZGNfbT55dltebkxHZ05PcV9vYFd4Y2JgZGQ/ZHRWXFx2SGBRR295eHJvXnBfcGhtcFplP2VUZ3NgYXBUdmg6X1pxZm9Kd2Z1RmlJWV1JWGFlcV9xWWF4eGBnV2hReXdRV3FfcXh3eWk6UWJkR3B0YGhzWWdkXm1IP2hsXnZeX3Y8b3NCSWZEYGJcXGhsZldoRl5yW1ZgT1dsWHFoTXdiOkF3bk9ld25eUWBiYWF0XUdvUmF3W1BfQWlmS0lkQFhhc25meHdhdm5qZnFyb15tbnh3R3dxWkFocl9lcmZjY2hxZk52bEdpVm9xYXdgV3hzPEh4c2hdSHZuUWdvUWF3cEdmcGZfUVlnd3h1akFpakddXnBebUZvVkl1cmlxWHdxYW9wWk5jcnlfeGdlRldqdVZxaGF5eHdpVld5ZWBtXmhfREZjXT9dZVhqQ1Z1ZlZqZD5wdU5jXUdiPGBcXFZmeTxBXFxGYF5MSVs8P1xcTnBkUGhuZG9aRmBrWz9bTD9cXFpQZkpOZlteX0BQeEBWbk1GbEVfY1hvbF9gd2RmXjxHaEZoZlNGb0dhaU5OamVeblpgcGtWa0pfdXBXcm92WnVubllRcEZfbmNXXkNRXFxE/*
* $Id: bnprint.h,v 1.1.1.1 1999/08/08 19:38:15 heller Exp $
*/
#ifndef Included_bnprint_h
#define Included_bnprint_h
#include "pgpBase.h"
PGP_BEGIN_C_DECLARATIONS
#include
#include "pgpOpaqueStructs.h"
/* Print in base 16 */
int bnPrint(FILE *f, char const *prefix, BigNum const *bn,
char const *suffix);
/* Print in base 10 */
int bnPrint10(FILE *f, char const *prefix, BigNum const *bn,
char const *suffix);
PGP_END_C_DECLARATIONS
#endif /* Included_bnprint_h */
WFU/bWpfQU1jaWo7dUtASFE8UU0+TXBDTHVGWUxKcHRwZFNWUXRDaWs+dVJjUE5RSG5FbVY9QFFQWXBsXFxORERSVHVvdUxrUGxLPUFMXkhQQ1xcdVNMc1NdU25EU3RNeF91bmNkWFl4dmNZVnhlVGVdWFBUdD1FVG9Fc2BsTnJlTkd0c09xdG9dUlh5T3NocFd1SlxcUVJTYXZKcHNScXhHZG49RFVMaVFlcHdSWW1maHNqWFVxZVNLYU9KdXBXdXZqaFVQaVFlcVlCSXBPVHF5QXZpPVFLQFlbQXFFWEpAZHVybG1wbFRWSUxYWXFMZG9rXVZOQU1qaFBoeHNUUG5rUXd2cVNaeEt0QWp3dG9saVRpaU9HPXRBaXRxcXZ0cXJIPEo8PE89WG1aYFc6cUs+PGptRHFfZXdPbXNaXFxybnV4XVVvSHhQPD13ZXF5VXFSZ1VxaGV0d1VsQElxaEl4RVxcWXlocjtoVmJ0bV1gcGY/WjxfeXZ4ZGpoXnFGd3ZXW2BZZVlfeHd3b2VAYl1Xc3Bhc25QZll5W1Z5cWpmdXdXaUVpaWVOd2VQWnNXbldXaWlpeXlZd3B5YkdRdGw/XmA/d0l5cWJhW3hvXVtfX2heXkduc2JYWnVJWlphaktOakpvY0RGYlJnXz8+dj5JXT1AZGd3X0pAXFw6PlpHRlo6cjo7QjpASjpwYzpGWjs+Wj06O1JZO1o8cjpyOl5baEdaPXI6O0o6QEo6UFo6RlpAPlo9OjtiOjtqOkBbPkI6REo6XltuR1pPcjo7Wjs+Wj1qOlRbPj46Plo6Plo/R1pRQjtiOkJZPWJAO1I7Plo7SkBMcjpoSzpQSjo6bHI6bFs9SjpSOjxqOlxcXFw9OjtiOj5aOlpCPlpCPjo8SjpKPkA6SVJ4O2o7ZFY6ZEp4PVI6dl5KPlpEXlk6NDpcIlx7XH0=
Using 3-space to visualize composition of functions
Next we want to visualize composition of functions. Note that the green and blue curves are the graphs of f and g respectively, using x, v, and y as described above, with the extra variable held constant. The red curve plots h.
g := x -> x^2:
f := v -> sin(v):
h := x -> f(g(x)):
x0 := 2;
v0 := g(x0):
y0 := f(g(x0)):
del := 2:
plotg := [x,g(x), y0, x=(x0-del)..(x0+del), color=blue]:
plotf := [x0, v, f(v), v=(v0-del)..(v0+del), color=green]:
ploth := [x, g(x), f(g(x)), x=(x0-del)..(x0+del), color=red]:
spacecurve({plotg, plotf, ploth},
thickness=3, axes=boxed, labels=["x", "v", "y"]);
16-bit step size */
int sieveBuildBig(unsigned char *array, unsigned size,
BigNum const *bn, BigNum const *step, unsigned dbl);
/* Return the next bit set in the sieve (or 0 on failure) */
unsigned sieveSearch(unsigned char const *array, unsigned size,
unsigned start);
PGP_END_C_DECLARATIONS
#endif /* Included_bnsieve_h */
;, "v", "y"]);