Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

ISO,IEC 10967-3 standard.Language independent arithmetic

.pdf
Скачиваний:
24
Добавлен:
23.08.2013
Размер:
453.11 Кб
Скачать

Working draft

imI (x) imi(I)(x) imc(I)(x)

plusitimesI!c(I)(x; y) negi(I)(x)

negc(I)(x) conjI (x) conji(I)(x) conjc(I)(x) addi(I)(x; y) addI;i(I)(x; y) addi(I);I (x; y) addI;c(I)(x; y) addc(I);I (x; y) addi(I);c(I)(x; y) addc(I);i(I)(x; y) addc(I)(x; y)

subi(I)(x; y) subI;i(I)(x; y) subi(I);I (x; y) subI;c(I)(x; y) subc(I);I (x; y) subi(I);c(I)(x; y) subc(I);i(I)(x; y) subc(I)(x; y)

muli(I)(x; y) mulI;i(I)(x; y) muli(I);I (x; y) mulI;c(I)(x; y) mulc(I);I (x; y) muli(I);c(I)(x; y) mulc(I);i(I)(x; y) mulc(I)(x; y)

eqi(I)(x; y) eqc(I)(x; y) neqi(I)(x; y) neqc(I)(x; y) :absi(I)(x)

:signi(I)(x)

 

ISO/IEC WD 10967-3.1:2001(E)

Im(x)

y

Im(x)

y

Im(x)

y

..x y

y

-x

y

-x

y

Conjugate(x)

y

Conjugate(x)

y

Conjugate(x)

y

x + y

y

x + y

y

x + y

y

x + y

y

x + y

y

x + y

y

x + y

y

x + y

y

x - y

y

x - y

y

x - y

y

x - y

y

x - y

y

x - y

y

x - y

y

x - y

y

x * y

y

x * y

y

x * y

y

x * y

y

x * y

y

x * y

y

x * y

y

x * y

y

x = y

y

x = y

y

x /= y

y

x /= y

y

abs(x)

y

sign(x)

y

where x and y are expressions of type CINT.

The LIA-3 basic complex oating point operations are listed below, along with the syntax used to invoke them:

itimesF !i(F )(x)

i

*

x

or

j

*

x

?

itimesi(F )!F (x)

i

*

x

or

j

*

x

?

C.1 Ada

63

ISO/IEC WD 10967-3.1:2001(E)

 

 

 

 

 

 

itimesc(F )(x)

i * x or

j * x

reF (x)

Re(x)

 

 

 

rei(F )(x)

Re(x)

 

 

 

rec(F )(x)

Re(x)

 

 

 

imF (x)

Im(x)

 

 

 

imi(F )(x)

Im(x)

 

 

 

imc(F )(x)

Im(x)

 

 

 

plusitimesc(F )(x; y)

Compose

 

From

 

Cartesian(x,y)

 

 

plusitimesc(F )(x; y)

x + i * y

or x + j * y

:::F (x; y)

Compose

 

From

 

Polar(x,y)

 

 

:::F (u; x; y)

Compose

 

From

 

Polar(x,y,u)

 

 

negi(F )(x)

-x

 

 

 

 

 

 

negc(F )(x)

-x

 

 

 

 

 

 

conjF (x)

Conjugate(x)

conji(F )(x)

Conjugate(x)

conjc(F )(x)

Conjugate(x)

addi(F )(x; y)

x + y

 

 

 

addF;i(F )(x; y)

x + y

 

 

 

addi(F );F (x; y)

x + y

 

 

 

addF;c(F )(x; y)

x + y

 

 

 

addc(F );F (x; y)

x + y

 

 

 

addi(F );c(F )(x; y)

x + y

 

 

 

addc(F );i(F )(x; y)

x + y

 

 

 

addc(F )(x; y)

x + y

 

 

 

subi(F )(x; y)

x - y

 

 

 

subF;i(F )(x; y)

x - y

 

 

 

subi(F );F (x; y)

x - y

 

 

 

subF;c(F )(x; y)

x - y

 

 

 

subc(F );F (x; y)

x - y

 

 

 

subi(F );c(F )(x; y)

x - y

 

 

 

subc(F );i(F )(x; y)

x - y

 

 

 

subc(F )(x; y)

x - y

 

 

 

muli(F )(x; y)

x * y

 

 

 

mulF;i(F )(x; y)

x * y

 

 

 

muli(F );F (x; y)

x * y

 

 

 

mulF;c(F )(x; y)

x * y

 

 

 

mulc(F );F (x; y)

x * y

 

 

 

muli(F );c(F )(x; y)

x * y

 

 

 

mulc(F );i(F )(x; y)

x * y

 

 

 

divi(F )(x; y)

x

/ y

 

 

 

divF;i(F )(x; y)

x

/ y

 

 

 

divi(F );F (x; y)

x

/ y

 

 

 

divF;c(F )(x; y)

x

/ y

 

 

 

divc(F );F (x; y)

x

/ y

 

 

 

divi(F );c(F )(x; y)

x

/ y

 

 

 

divc(F );i(F )(x; y)

x

/ y

 

 

 

Working draft

?

y y

?

y

?

?

?

?

?Not LIA-3...

?Not LIA-3...

y

?

?

?

?

?

?

?

?

?

?

?

?

?

?

?

?

?

?

?

?

?

?

?

?

?

?

?

?

?

?

64

Example bindings for speci c languages

Working draft

ISO/IEC WD 10967-3.1:2001(E)

eqi(F )(x; y)

x = y

?

eqc(F )(x; y)

x = y

?

neqi(F )(x; y)

x /= y

?

neqc(F )(x; y)

x /= y

?

:lti(F )(x; y)

x

< y

?

:leqi(F )(x; y)

x

<= y

?

:gti(F )(x; y)

x

> y

?

:geqi(F )(x; y)

x

>= y

?

absi(F )(x)

abs x

?

absc(F )(x)

abs x or Modulus(x)

?

phaseF (x)

Argument(x)

y

phasei(F )(x)

Argument(x)

?

phasec(F )(x)

Argument(x)

?

:phaseuc(F )(u; x)

Argument(x,u)

?

signi(F )(x)

Sign(x)

y

where x, y, and z are expressions of type CFLT.

The parameters for LIA-3 operations approximating real complex valued functions can be accessed by the following syntax:

max err mulc(F ) max err divc(F ) max err expc(F ) max err powerc(F ) max err sinc(F ) max err tanc(F )

Err

 

Mul(x)

y

Err

 

Div(x)

y

Err

 

Exp(x)

y

Err

 

Power(x)

y

Err

 

Sin(x)

y

Err

 

Tan(x)

y

where x is an expression of type CFLT. Several of the parameter functions are constant for each type (and library), the argument is then used only to di erentiate among the oating point types.

The LIA-3 elementary oating point operations are listed below, along with the syntax used to invoke them:

mulc(F )(x; y)

x * y

?

divc(F )(x; y)

x

/ y

?

signc(F )(x)

Sign(x)

y

expi(F )(x)

Exp(x)

?

cisc(F )(x)

Exp(x)

?

expc(F )(x)

Exp(x)

?

:powerc(F );F (b; y)

b

** y

?

:powerF;c(F )(b; x)

b

** x

?

powerc(F )(x; y)

x ** y

?

sqrtF !c(F )(x)

Sqrtc(x)

y

sqrti(F )!c(F )(x)

Sqrt(x)

y

sqrtc(F )(x)

Sqrt(x)

?

lnF !c(F )(x)

Logc(x)

y

C.1 Ada

65

ISO/IEC WD 10967-3.1:2001(E)

Working draft

lni(F )!c(F )(x)

Log(x)

y

lnc(F )(x)

Log(x)

?

logbasec(F )(b; x)

Log(x, b) (note parameter order)

y

radi(F )(x)

Rad(x)

y

radc(F )(x)

Rad(x)

y

sini(F )(x)

Sin(x)

y

sinc(F )(x)

Sin(x)

?

cosi(F )(x)

Cos(x)

y

cosc(F )(x)

Cos(x)

?

tani(F )(x)

Tan(x)

y

tanc(F )(x)

Tan(x)

?

coti(F )(x)

Cot(x)

y

cotc(F )(x)

Cot(x)

?

seci(F )(x)

Sec(x)

y

secc(F )(x)

Sec(x)

y

csci(F )(x)

Csc(x)

y

cscc(F )(x)

Csc(x)

y

arcsinF !c(F )(x)

ArcSinc(x)

y

arcsini(F )(x)

ArcSin(x)

y

arcsinc(F )(x)

ArcSin(x)

?

arccosF !c(F )(x)

ArcCosc(x)

y

arccosi(F )!c(F )(x)

ArcCos(x)

?

arccosc(F )(x)

ArcCos(x)

?

arctani(F )(x)

ArcTan(x)

y

arctanc(F )(x)

ArcTan(x)

?

arccoti(F )(x)

ArcCot(x)

y

arccotc(F )(x)

ArcCot(x)

y

arcsecF !c(F )(x)

ArcSecc(x)

y

arcseci(F )!c(F )(x)

ArcSec(x)

y

arcsecc(F )(x)

ArcSec(x)

y

arccscF !c(F )(x)

ArcCscc(x)

y

arccsci(F )(x)

ArcCsc(x)

y

arccscc(F )(x)

ArcCsc(x)

y

radhF (x)

RadH(x)

y

radhi(F )(x)

RadH(x)

y

radhc(F )(x)

RadH(x)

y

sinhi(F )(x)

SinH(x)

y

sinhc(F )(x)

SinH(x)

?

coshi(F )(x)

CosH(x)

y

coshc(F )(x)

CosH(x)

?

tanhi(F )(x)

TanH(x)

y

tanhc(F )(x)

TanH(x)

?

66

Example bindings for speci c languages

Working draft

 

ISO/IEC WD 10967-3.1:2001(E)

cothi(F )(x)

CotH(x)

y

cothc(F )(x)

CotH(x)

?

sechi(F )(x)

SecH(x)

y

sechc(F )(x)

SecH(x)

y

cschi(F )(x)

CscH(x)

y

cschc(F )(x)

CscH(x)

y

arcsinhi(F )(x)

ArcSinH(x)

y

arcsinhi(F )!c(F )(x)

ArcSinHc(x)

y

arcsinhc(F )(x)

ArcSinH(x)

?

arccoshF !c(F )(x)

ArcCosHc(x)

y

arccoshi(F )!c(F )(x)

ArcCosH(x)

?

arccoshc(F )(x)

ArcCosH(x)

?

arctanhF !c(F )(x)

ArcTanHc(x)

y

arctanhi(F )(x)

ArcTanH(x)

y

arctanhc(F )(x)

ArcTanH(x)

?

arccothF !c(F )(x)

ArcCotHc(x)

y

arccothi(F )(x)

ArcCotH(x)

y

arccothc(F )(x)

ArcCotH(x)

?

arcsechF !c(F )(x)

ArcSecHc(x)

y

arcsechi(F )!c(F )(x)

ArcSecH(x)

y

arcsechc(F )(x)

ArcSecH(x)

y

arccschi(F )(x)

ArcCscH(x)

y

arccschF !c(F )(x)

ArcCscHc(x)

y

arccschc(F )(x)

ArcCscH(x)

y

where x and y are expressions of type CFLT.

Arithmetic value conversions in Ada are always explicit.

convertI!c(I)(x)

Compose

 

From

 

Cartesian(x)

y

 

 

converti(I)!c(I)(x)

Compose

 

From

 

Cartesian(x)

y

 

 

converti(I)!i(I0)(x)

Compose

 

From

 

Cartesian(x)

y

 

 

convertc(I)!c(I0)(x)

Compose

 

From

 

Cartesian(x)

y

 

 

convertF !c(F )(x)

Compose

 

From

 

Cartesian(x)

?

 

 

convertF !c(F )(x)

x + i * Im(x) or x + j * Im(x)

y

converti(F )!c(F )(x)

Compose

 

From

 

Cartesian(x)

?

 

 

converti(F )!c(F )(x)

Re(x) + x

?

converti(F )!i(F 0)(x)

Compose

 

From

 

Cartesian(x)

y

 

 

convertc(F )!c(F 0)(x)

Compose

 

From

 

Cartesian(x)

y

 

 

converti(F )!i(D)(x)

Compose

 

From

 

Cartesian(x)

y

 

 

convertc(F )!c(D)(x)

Compose

 

From

 

Cartesian(x)

y

 

 

converti(D)!i(F )(x)

Compose

 

From

 

Cartesian(x)

y

 

 

convertc(D)!c(F )(x)

Compose

 

From

 

Cartesian(x)

y

 

 

Numerals...:

 

 

 

 

 

 

 

:imaginary

 

uniti(I)

...

 

 

 

 

 

y

 

 

 

 

 

 

:imaginary

 

unitc(I)

...

 

 

 

 

 

y

 

 

 

 

 

 

C.1 Ada

67

ISO/IEC WD 10967-3.1:2001(E)

 

Working draft

:imaginary

 

uniti(F )

i or

j

?

 

:imaginary

 

unitc(F )

-0+i

or -0+j

?

 

C.2 C

The programming language C is de ned by ISO/IEC 9899:1999, Information technology { Programming languages { C [13].

An implementation should follow all the requirements of LIA-3 unless otherwise speci ed by this language binding.

The operations or parameters marked \y" are not part of the language and should be provided by an implementation that wishes to conform to the LIA-3 for that operation. For each of the marked items a suggested identi er is provided.

The LIA datatype Boolean is implemented by the C datatype int (1 = true and 0 = false), or the new Bool datatype.

Every implementation of C has integral datatypes int, long int, unsigned int, and unsigned long int. INT is used below to designate one of the integer datatypes.

C99 has three complex oating point datatypes: float Complex, double Complex, and long double Complex, and may have three imaginary oating point datatypes: float Imaginary, double Imaginary, and long double Imaginary. Complex and Imaginary are usually written complex and imaginary respectively.) CFLT is used below to designate one of the complex or imaginary (as appropriate for the operation) oating point datatypes. The operations marked \(?)" are available only when the implementation provides imaginary oating point datatypes.

The LIA-3 complex integer operations are listed below, along with the syntax used to invoke them:

itimesI!i(I)(x) itimesi(I)(x) itimesc(I)(x) reI (x)

rei(I)(x) rec(I)(x) imI (x) imi(I)(x) imc(I)(x)

plusitimesI!c(I)(x; y) negi(I)(x)

negc(I)(x) conjI (x) conji(I)(x) conjc(I)(x) addi(I)(x; y) addI;i(I)(x; y) addi(I);I (x; y) addI;c(I)(x; y) addc(I);I (x; y) addi(I);c(I)(x; y)

I * x

y

..x

y

..x

y

creali(x)

y

creali(x)

y

creali(x)

y

cimagi(x)

y

cimagi(x)

y

cimagi(x)

y

..x y

y

-x

y

-x

y

conji(x)

y

conji(x)

y

conji(x)

y

x + y

y

x + y

y

x + y

y

x + y

y

x + y

y

x + y

y

68

Example bindings for speci c languages

Working draft

addc(I);i(I)(x; y) addc(I)(x; y)

subi(I)(x; y) subI;i(I)(x; y) subi(I);I (x; y) subI;c(I)(x; y) subc(I);I (x; y) subi(I);c(I)(x; y) subc(I);i(I)(x; y) subc(I)(x; y)

muli(I)(x; y) mulI;i(I)(x; y) muli(I);I (x; y) mulI;c(I)(x; y) mulc(I);I (x; y) muli(I);c(I)(x; y) mulc(I);i(I)(x; y) mulc(I)(x; y)

eqi(I)(x; y) eqc(I)(x; y) neqi(I)(x; y) neqc(I)(x; y) :absi(I)(x)

:signi(I)(x)

 

ISO/IEC WD 10967-3.1:2001(E)

x + y

y

x + y

y

x - y

y

x - y

y

x - y

y

x - y

y

x - y

y

x - y

y

x - y

y

x - y

y

x * y

y

x * y

y

x * y

y

x * y

y

x * y

y

x * y

y

x * y

y

x * y

y

x == y

y

x == y

y

x != y

y

x != y

y

cabsi(x)

y

signi(x)

y

where x and y are expressions of type CINT.

The LIA-3 non-transcendental complex oating point operations are listed below, along with the syntax used to invoke them:

itimesF !i(F )(x) itimesi(F )!F (x) itimesc(F )(x) reF (x)

rei(F )(x) rec(F )(x) imF (x) imi(F )(x) imc(F )(x)

plusitimesc(F )(x; y) negi(F )(x)

negc(F )(x) conjF (x) conji(F )(x) conjc(F )(x)

addi(F )(x; y)

I * x

 

?

I * x

 

?

I * x

 

?

crealt(x)

 

y

crealt(x)

 

y

crealt(x) or creal(x)

?

cimagt(x)

 

y

cimagt(x)

 

y

cimagt(x) or

cimag(x)

?

x + I * y

 

?

- x

 

(?)

- x

 

?

conjt(x)

 

y

conjt(x) or conj(x)

(?)

conjt(x) or

conj(x)

?

x + y

 

?

C.2 C

69

ISO/IEC WD 10967-3.1:2001(E)

 

Working draft

addF;i(F )(x; y)

x + y

?

addi(F );F (x; y)

x + y

?

addF;c(F )(x; y)

x + y

?

addc(F );F (x; y)

x + y

?

addi(F );c(F )(x; y)

x + y

?

addc(F );i(F )(x; y)

x + y

?

addc(F )(x; y)

x + y

?

subi(F )(x; y)

x - y

?

subF;i(F )(x; y)

x - y

?

subi(F );F (x; y)

x - y

?

subF;c(F )(x; y)

x - y

?

subc(F );F (x; y)

x - y

?

subi(F );c(F )(x; y)

x - y

?

subc(F );i(F )(x; y)

x - y

?

subc(F )(x; y)

x - y

?

muli(F )(x; y)

x * y

?

mulF;i(F )(x; y)

x * y

?

muli(F );F (x; y)

x * y

?

mulF;c(F )(x; y)

x * y

?

mulc(F );F (x; y)

x * y

?

muli(F );c(F )(x; y)

x * y

?

mulc(F );i(F )(x; y)

x * y

?

divi(F )(x; y)

x

/ y

?

divF;i(F )(x; y)

x

/ y

?

divi(F );F (x; y)

x

/ y

?

divF;c(F )(x; y)

x

/ y

?

divc(F );F (x; y)

x

/ y

?

divi(F );c(F )(x; y)

x

/ y

?

divc(F );i(F )(x; y)

x

/ y

?

eqi(F )(x; y)

x == y

(?)

eqc(F )(x; y)

x == y

?

neqi(F )(x; y)

x != y

(?)

neqc(F )(x; y)

x != y

?

absi(F )(x)

cabst(x) or cabs(x)

(?)

absc(F )(x)

cabst(x) or cabs(x)

?

phaseF (x)

cargt(x)

y

phasei(F )(x)

cargt(x) or carg(x)

(?)

phasec(F )(x)

cargt(x) or carg(x)

?

:phaseuc(F )(u; x)

cargt(x,u)

y

signi(F )(x)

csignt(x)

y

:::c(F )(x)

cprojt(x) or cproj(x)

? Not LIA-3.

where x, y and z are expressions of the same complex oating point type.

The LIA-3 parameters for operations approximating complex real valued transcendental functions can be accessed by the following syntax:

70

Example bindings for speci c languages

Working draft

max err mulc(F ) max err divc(F ) max err expc(F ) max err powerc(F ) max err sinc(F ) max err tanc(F )

where t ...

 

 

 

ISO/IEC WD 10967-3.1:2001(E)

err

 

cmult

y

err

 

cdivt

y

err

 

cexpt

y

err

 

cpowert

y

err

 

csint

y

err

 

ctant

y

The LIA-3 elementary complex oating point operations are listed below, along with the syntax used to invoke them:

mulc(F )(x; y) divc(F )(x; y) signc(F )(x)

expi(F )(x) cisc(F )(x) expc(F )(x)

:powerc(F );F (b; y) :powerF;c(F )(b; x) powerc(F )(b; y) powc(F )(b; y)

sqrtF !c(F )(x)

sqrti(F )!c(F )(x)

sqrtc(F )(x)

lnF !c(F )(x)

lni(F )!c(F )(x) lni(F )!c(F )(x)

lnc(F )(x) :logbasec(F )(b; x)

radi(F )(x) radc(F )(x)

sini(F )(x) sinc(F )(x) cosi(F )(x) cosc(F )(x) tani(F )(x) tanc(F )(x) coti(F )(x) cotc(F )(x) seci(F )(x) secc(F )(x) csci(F )(x) cscc(F )(x)

x * y

?

x / y

?

csignt(x)

y

exp(x)

?

exp(I*x)

?

cexpt(x) or exp(x)

?

powr(b, y)

y

powr(b, x)

y

cpowert(b, y)

y

cpowt(b, y) or pow(b, y)

? Not LIA-3!

sqrtc(x)

y

sqrt(x)

?

csqrtt(x) or sqrt(x)

?

log(abs(x))+I*atan2(cimag(x),x))

y

log(abs(x))+I*atan2(cimag(x),creal(x))y

log(x)

?

clogt(x) or log(x)

?

clogbaset(b, x)

y

radiant(x)

y

radiant(x)

y

sin(x)

?

csint(x) or sin(x)

?

cos(x)

?

ccost(x) or cos(x)

?

tant(x)

?

ctant(x) or tan(x)

?

cot(x)

y

ccott(x)

y

sec(x)

y

csect(x)

y

csc(x)

y

ccsct(x)

y

C.2 C

71

ISO/IEC WD 10967-3.1:2001(E)

arcsinF !c(F )(x) arcsini(F )(x) arcsinc(F )(x) arccosF !c(F )(x) arccosi(F )!c(F )(x) arccosc(F )(x) arctani(F )(x) arctanc(F )(x) arccoti(F )(x) arccotc(F )(x) arcsecF !c(F )(x) arcseci(F )!c(F )(x) arcsecc(F )(x) arccscF !c(F )(x) arccsci(F )(x) arccscc(F )(x)

radhF (x) radhi(F )(x) radhc(F )(x)

sinhi(F )(x) sinhc(F )(x) coshi(F )(x) coshc(F )(x) tanhi(F )(x) tanhc(F )(x) cothi(F )(x) cothc(F )(x) sechi(F )(x) sechc(F )(x) cschi(F )(x) cschc(F )(x)

arcsinhi(F )(x) arcsinhi(F )!c(F )(x) arcsinhc(F )(x) arccoshF !c(F )(x) arccoshi(F )!c(F )(x) arccoshc(F )(x) arctanhF !c(F )(x) arctanhi(F )(x) arctanhc(F )(x) arccothF !c(F )(x) arccothi(F )(x) arccothc(F )(x) arcsechF !c(F )(x)

asinc(x) asin(x)

casint(x) or asin(x) acosc(x)

acos(x)

cacost(x) or acos(x) atan(x)

catant(x) or atan(x) acot(x)

cacott(x) asecc(x) asecc(x) casect(x) acscc(x) acsc(x) cacsct(x)

radianht(x) radianht(x) radianht(x)

sinh(x)

csinht(x) or sinh(x) cosh(x)

ccosht(x) or cosh(x) tanh(x)

ctanht(x) or tanh(x) coth(x)

ccotht(x) sech(x) csecht(x) csch(x) ccscht(x)

asinh(x) asinhc(x)

casinht(x) or asinh(x) acoshc(x)

acosh(x)

cacosht(x) or acosh(x) atanhc(x)

atanh(x)

catanht(x) or atanh(x) acothc(x)

acoth(x) cacotht(x) asechc(x)

Working draft

y

?

?

y

?

?

?

?

y y y y y y y y

y y y

?

?

?

?

?

?

y y y y y y

?

y

?

?

?

?

y

?

?

y y y y

72

Example bindings for speci c languages