Funzioni di libreria: operazioni su numeri interi e in virgola mobile

Proteus è privo di operatori; si è deciso di utilizzare funzioni anche per effettuare operazioni di tipo numerico per ottenere una maggiore consistenza sintattica, dal momento che in questo caso sarebbero gli operatori a determinare l'interpretazione degli operandi e non viceversa!

Le funzioni di questa categoria sono suddivise in tre classi:

I nomi delle funzioni ricalcano i nomi delle rispettive funzioni 'C' ove possibile, oppure gli operatori Assembly. Gli operatori binari sui numeri iniziano sempre con la lettera N (es. NAND, NOR, ecc.), per distinguerli dalle controparti logiche; ad esempio:

Nel caso in cui un parametro sia prefissato dal carattere "@", la funzione memorizza nel parametro stesso il suo risultato al termine dell'elaborazione.

Funzioni per numeri interi:

DIV([@]n1, [@]n2[, n3..])

divisione intera (n1 / n2)[/ n3..]

MOD([@]n1, [@]n2[, n3..])

modulo (resto della divisione intera di n1 per n2 [per n3..])

FACT([@]n)

ritorna il fattoriale di n

NAND([@]n1, [@]n2[, n3..])

corrisponde a '&' in 'C': AND binario dei numeri indicati; es. NAND(1, 3) = 1

NOR([@]n1, [@]n2[, n3..])

corrisponde a '|' in 'C': OR binario dei numeri indicati; es. NOR(1, 3) = 1

NXOR([@]n1, [@]n2[, n3..])

corrisponde a '^' in 'C': XOR binario dei numeri indicati; es. NXOR(1, 3) = 2

NNOT([@]n)

corrisponde a '~' in 'C': NOT binario (complemento) di n

SHIFTLT([@]n, nNumBits)

shifta a sinistra di nNumBits il numero intero n

SHIFTRT([@]n, nNumBits)

shifta a destra di nNumBits il numero intero n

BITGET([@]n, nOffset)

ritorna il bit nOffset del numero intero n; il valore ritornato è sempre 0 o 1; se nOffset non ha senso, ritorna 0

BITSET([@]n, nOffset, nBit)

ritorna n con il bit a nOffset impostato al valore di nBit (0 o 1)

RANDOM(nMax)
RANDOM(nMin, nMax)

ritorna un numero intero casuale nell'intervallo [0, nMax - 1] se viene specificato un solo parametro, oppure un valore intero nell'intervallo [nMin, nMax] se sono specificati due parametri. Per ottenere un numero casuale tra 0 ed il massimo intero positivo rappresentabile sulla macchina specificare un valore negativo (es. -1) come unico parametro; per ottenere un numero casuale positivo o negativo, in valore assoluto compreso tra 0 e la metà del massimo intero positivo rappresentabile, specificare il valore -1 sia per nMin che per nMax. L'intervallo, cioè |nMax - nMin|, deve comunque essere inferiore al massimo intero positivo rappresentabile per ottenere un valore coerente con gli estremi specificati.

RANDOMINIT(n)

re-inizializza il generatore di numeri casuali utilizzando il valore n specificato. Proteus, all'avvio dell'interprete, imposta automaticamente il generatore con informazioni temporali dell'ambiente d'esecuzione, pertanto non è necessario invocare esplicitamente questa funzione, a meno che non si voglia generare ripetutamente una medesima sequenza di numeri casuali. L'utilizzo della funzione STRRANDOM re-imposta implicitamente il generatore al valore passato come terzo parametro, come se si fosse invocata questa funzione.

BIN2S(n)

ritorna una stringa di '0' e '1' con la rappresentazione binaria di n

S2BIN(c)

ritorna il numero corrispondente alla rappresentazione binaria c (stringa di '0' e '1'); se c non è valida, ritorna 0

Funzioni per numeri in virgola mobile:

FDIV([@]f1, [@]f2[, f3..])

divisione in virgola mobile (f1 / f2)[/ f3..]

FMOD([@]f1, [@]f2[, f3..])

modulo in virgola mobile (resto della divisione n1 / n2 [/ n3..])

FRAC([@]f)

parte frazionaria di f

EXP([@]f)

ritorna la base e elevata alla potenza f

POW([@]f1, [@]f2[, f3..])

ritorna f1 elevato alla potenza f2 [elevato alla potenza f3..]

SQRT([@]f)

ritorna la radice quadrata di f

SIN([@]f)

ritorna il seno di f

COS([@]f)

ritorna il coseno di f

TAN([@]f)

ritorna la tangente di f

ASIN([@]f)

ritorna l'arcoseno di f

ACOS([@]f)

ritorna l'arcocoseno di f

ATAN([@]f)

ritorna l'arcotangente di f

LOG10([@]f)

ritorna il logaritmo in base 10 di f

LOG([@]f)

ritorna il logaritmo naturale di f

CEIL([@]f)

ritorna il sup di f (minimo intero maggiore o uguale a f)

FLOOR([@]f)

ritorna l'inf di f (massimo intero minore o uguale a f)

HYP([@]f1, [@]f2)

ipotenusa di f1 e f2 (cioé la radice quadrata della somma dei quadrati di f1 e f2)

Funzioni miste (queste funzioni appartengono a entrambe le classi, in quanto restituiscono un intero o un numero in virgola mobile a seconda degli argomenti):

MUL([@]nf1, [@]nf2[, nf3..])

restituisce il prodotto dei numeri

ADD([@]nf1, [@]nf2[, nf3..])

restituisce la somma dei numeri

SUB([@]nf1, [@]nf2[, nf3..])

restituisce nf1 - nf2 [- nf3..]

INC([@]nf)

restituisce nf + 1 (se nf è un identificatore, il suo valore è modificato solo se passato per riferimento)

DEC([@]nf)

restituisce nf - 1 (se nf è un identificatore, il suo valore è modificato solo se passato per riferimento)

INT([@]nf)

parte intera (intero, o virgola mobile se insufficiente)

ABS([@]nf)

restituisce il valore assoluto di nf

NEG([@]n)

restituisce -nf

MIN([@]nf1, [@]nf2[, nf3..])

restituisce il minore dei valori specificati

MAX([@]nf1, [@]nf2[, nf3..])

restituisce il maggiore dei valori specificati

EQ(nf1, nf2)

restituisce un valore diverso da 0 se e solo se nf1 == nf2

NEQ(nf1, nf2)

restituisce un valore diverso da 0 se e solo se nf1 != nf2

LT(nf1, nf2)

restituisce un valore diverso da 0 se e solo se nf1 < nf2

LE(nf1, nf2)

restituisce un valore diverso da 0 se e solo se nf1 <= nf2

GT(nf1, nf2)

restituisce un valore diverso da 0 se e solo se nf1 > nf2

GE(nf1, nf2)

restituisce un valore diverso da 0 se e solo se nf1 >= nf2

Da notare che Proteus promuove automaticamente un intero a numero in virgola mobile se il risultato di un'operazione esce dal range di valori ammessi (ad esempio, in seguito ad una moltiplicazione).

Gestione automatica degli errori nelle operazioni sui numeri:

Inizio pagina Prossimo argomento Argomento precedente Indice per argomenti Indice analitico