From peren!uunet!hpclearh.cup.hp.com!jimthomas Wed Feb 19 13:40 PST 1997
Return-Path: <peren!uunet!hpclearh.cup.hp.com!jimthomas>
Received: by cobra. (5.x/SMI-SVR4)
	id AA07189; Wed, 19 Feb 1997 13:40:45 -0800
	id NAA16510; Wed, 19 Feb 1997 13:23:23 -0800
	(peer crosschecked as: palrel1.hp.com [15.253.72.10])
	id QQcdpq28781; Wed, 19 Feb 1997 15:31:52 -0500 (EST)
Received: from peren by cobra; Wed, 19 Feb 1997 13:40 PST
Received: by  (SMI-8.6/SMI-SVR4)
	id NAA16510; Wed, 19 Feb 1997 13:23:23 -0800
	(peer crosschecked as: palrel1.hp.com [15.253.72.10])
	id QQcdpq28781; Wed, 19 Feb 1997 15:31:52 -0500 (EST)
Received: from uunet by peren; Wed, 19 Feb 1997 13:23 PST
Received: from palrel1.hp.com by relay1.UU.NET with ESMTP 
	(peer crosschecked as: palrel1.hp.com [15.253.72.10])
	id QQcdpq28781; Wed, 19 Feb 1997 15:31:52 -0500 (EST)
Received: from hpclearh.cup.hp.com (hpclearh.cup.hp.com [15.0.97.241]) by palrel1.hp.com with ESMTP (8.7.5/8.7.3) id MAA21385 for <peren!cobra!jb@uunet.uu.net>; Wed, 19 Feb 1997 12:31:53 -0800 (PST)
Received: from hpclearh (localhost) by hpclearh.cup.hp.com with SMTP
	(1.37.109.15/15.5+IOS 3.20+cup+OMrelay) id AA065714307; Wed, 19 Feb 1997 12:31:47 -0800
>Received: by  (SMI-8.6/SMI-SVR4)
	id NAA16510; Wed, 19 Feb 1997 13:23:23 -0800
>Received: from palrel1.hp.com by relay1.UU.NET with ESMTP 
	(peer crosschecked as: palrel1.hp.com [15.253.72.10])
	id QQcdpq28781; Wed, 19 Feb 1997 15:31:52 -0500 (EST)
Sender: peren!uunet!hpclearh.cup.hp.com!jimthomas
Message-Id: <330B6333.6532@cup.hp.com>
Date: Wed, 19 Feb 1997 12:31:47 -0800
From: "(C) Jim Thomas" <peren!uunet!hpclearh.cup.hp.com!jimthomas>
X-Mailer: Mozilla 3.0 (X11; I; HP-UX A.09.05 9000/755)
Mime-Version: 1.0
To: john c benito <uunet!peren!cobra!jb>
Subject: Re: no doc number
References: <9702190227.AA02045@cobra.>
Content-Type: multipart/mixed; boundary="------------67CD63B7977"
Status: RO
X-Lines: 4131
Content-Length: 63193

--------------67CD63B7977
Content-Type: text/plain; charset="us-ascii"; conversions="7bit"
X-Sun-Content-Length: 140

john c benito wrote:
> 
> Hi Jim,
> 
> OK, just let me know.  BTW, you still need to get me
> the document N657.

jb,  It's attached.  -Jim

--------------67CD63B7977
Content-Type: application/x-shar; name="enhancements.ps.shar"; conversions="7bit"
Content-Disposition: inline; filename="enhancements.ps.shar"
X-Sun-Content-Length: 62707


# This is a shell archive.  Remove anything before this line,
# then unpack it by saving it in a file and typing "sh file".
#
# Wrapped by (C) Jim Thomas <jimthomas@hpcll218> on Fri Feb  7 10:58:23 1997
#
# This archive contains:
#	enhancements.ps	
#

LANG=""; export LANG
PATH=/bin:/usr/bin:$PATH; export PATH

echo x - enhancements.ps
sed 's/^@//' >enhancements.ps <<'@EOF'
%!PS-Adobe-3.0
%%Title: (Microsoft Word - enhancements)
%%Creator: (Microsoft Word: PSPrinter 8.1.1)
%%CreationDate: (4:35 PM Thursday, February 6, 1997)
%%For: ()
%%Pages: 10
%%DocumentFonts: Times-Roman Symbol Times-Bold Times-Italic Courier-Bold Courier-BoldOblique
%%DocumentNeededFonts: Times-Roman Symbol Times-Bold Times-Italic Courier-Bold Courier-BoldOblique
%%DocumentSuppliedFonts:
%%DocumentData: Clean7Bit
%%PageOrder: Ascend
%%Orientation: Portrait
%ADO_PaperArea: -31 -30 761 582
%ADO_ImageableArea: 0 0 730 552
%%EndComments
/md 184 dict def md begin
/currentpacking where {pop /sc_oldpacking currentpacking def true setpacking}if
%%BeginFile: adobe_psp_basic
%%Copyright: Copyright 1990-1993 Adobe Systems Incorporated. All Rights Reserved.
/bd{bind def}bind def
/xdf{exch def}bd
/xs{exch store}bd
/ld{load def}bd
/Z{0 def}bd
/T/true
/F/false
/:L/lineto
/lw/setlinewidth
/:M/moveto
/rl/rlineto
/rm/rmoveto
/:C/curveto
/:T/translate
/:K/closepath
/:mf/makefont
/gS/gsave
/gR/grestore
/np/newpath
14{ld}repeat
/$m matrix def
/av 81 def
/por true def
/normland false def
/psb-nosave{}bd
/pse-nosave{}bd
/us Z
/psb{/us save store}bd
/pse{us restore}bd
/level2
/languagelevel where
{
pop languagelevel 2 ge
}{
false
}ifelse
def
/featurecleanup
{
stopped
cleartomark
countdictstack exch sub dup 0 gt
{
{end}repeat
}{
pop
}ifelse
}bd
/noload Z
/startnoload
{
{/noload save store}if
}bd
/endnoload
{
{noload restore}if
}bd
level2 startnoload
/setjob
{
statusdict/jobname 3 -1 roll put
}bd
/setcopies
{
userdict/#copies 3 -1 roll put
}bd
level2 endnoload level2 not startnoload
/setjob
{
1 dict begin/JobName xdf currentdict end setuserparams
}bd
/setcopies
{
1 dict begin/NumCopies xdf currentdict end setpagedevice
}bd
level2 not endnoload
/pm Z
/mT Z
/sD Z
/realshowpage Z
/initializepage
{
/pm save store mT concat
}bd
/endp
{
pm restore showpage
}def
/$c/DeviceRGB def
/rectclip where
{
pop/rC/rectclip ld
}{
/rC
{
np 4 2 roll
:M
1 index 0 rl
0 exch rl
neg 0 rl
:K
clip np
}bd
}ifelse
/rectfill where
{
pop/rF/rectfill ld
}{
/rF
{
gS
np
4 2 roll
:M
1 index 0 rl
0 exch rl
neg 0 rl
fill
gR
}bd
}ifelse
/rectstroke where
{
pop/rS/rectstroke ld
}{
/rS
{
gS
np
4 2 roll
:M
1 index 0 rl
0 exch rl
neg 0 rl
:K
stroke
gR
}bd
}ifelse
%%EndFile
%%BeginFile: adobe_psp_colorspace_level1
%%Copyright: Copyright 1991-1993 Adobe Systems Incorporated. All Rights Reserved.
/G/setgray ld
/:F/setrgbcolor ld
%%EndFile
%%BeginFile: adobe_psp_uniform_graphics
%%Copyright: Copyright 1990-1993 Adobe Systems Incorporated. All Rights Reserved.
/@a
{
np :M 0 rl :L 0 exch rl 0 rl :L fill
}bd
/@b
{
np :M 0 rl 0 exch rl :L 0 rl 0 exch rl fill
}bd
/arct where
{
pop
}{
/arct
{
arcto pop pop pop pop
}bd
}ifelse
/x1 Z
/x2 Z
/y1 Z
/y2 Z
/rad Z
/@q
{
/rad xs
/y2 xs
/x2 xs
/y1 xs
/x1 xs
np
x2 x1 add 2 div y1 :M
x2 y1 x2 y2 rad arct
x2 y2 x1 y2 rad arct
x1 y2 x1 y1 rad arct
x1 y1 x2 y1 rad arct
fill
}bd
/@s
{
/rad xs
/y2 xs
/x2 xs
/y1 xs
/x1 xs
np
x2 x1 add 2 div y1 :M
x2 y1 x2 y2 rad arct
x2 y2 x1 y2 rad arct
x1 y2 x1 y1 rad arct
x1 y1 x2 y1 rad arct
:K
stroke
}bd
/@i
{
np 0 360 arc fill
}bd
/@j
{
gS
np
:T
scale
0 0 .5 0 360 arc
fill
gR
}bd
/@e
{
np
0 360 arc
:K
stroke
}bd
/@f
{
np
$m currentmatrix
pop
:T
scale
0 0 .5 0 360 arc
:K
$m setmatrix
stroke
}bd
/@k
{
gS
np
:T
0 0 :M
0 0 5 2 roll
arc fill
gR
}bd
/@l
{
gS
np
:T
0 0 :M
scale
0 0 .5 5 -2 roll arc
fill
gR
}bd
/@m
{
np
arc
stroke
}bd
/@n
{
np
$m currentmatrix
pop
:T
scale
0 0 .5 5 -2 roll arc
$m setmatrix
stroke
}bd
%%EndFile
%%BeginFile: adobe_psp_basic_text
%%Copyright: Copyright 1990-1993 Adobe Systems Incorporated. All Rights Reserved.
/S/show ld
/A{
0.0 exch ashow
}bd
/R{
0.0 exch 32 exch widthshow
}bd
/W{
0.0 3 1 roll widthshow
}bd
/J{
0.0 32 4 2 roll 0.0 exch awidthshow
}bd
/V{
0.0 4 1 roll 0.0 exch awidthshow
}bd
/fcflg true def
/fc{
fcflg{
vmstatus exch sub 50000 lt{
(%%[ Warning: Running out of memory ]%%\r)print flush/fcflg false store
}if pop
}if
}bd
/$f[1 0 0 -1 0 0]def
/:ff{$f :mf}bd
/MacEncoding StandardEncoding 256 array copy def
MacEncoding 39/quotesingle put
MacEncoding 96/grave put
/Adieresis/Aring/Ccedilla/Eacute/Ntilde/Odieresis/Udieresis/aacute
/agrave/acircumflex/adieresis/atilde/aring/ccedilla/eacute/egrave
/ecircumflex/edieresis/iacute/igrave/icircumflex/idieresis/ntilde/oacute
/ograve/ocircumflex/odieresis/otilde/uacute/ugrave/ucircumflex/udieresis
/dagger/degree/cent/sterling/section/bullet/paragraph/germandbls
/registered/copyright/trademark/acute/dieresis/notequal/AE/Oslash
/infinity/plusminus/lessequal/greaterequal/yen/mu/partialdiff/summation
/product/pi/integral/ordfeminine/ordmasculine/Omega/ae/oslash
/questiondown/exclamdown/logicalnot/radical/florin/approxequal/Delta/guillemotleft
/guillemotright/ellipsis/space/Agrave/Atilde/Otilde/OE/oe
/endash/emdash/quotedblleft/quotedblright/quoteleft/quoteright/divide/lozenge
/ydieresis/Ydieresis/fraction/currency/guilsinglleft/guilsinglright/fi/fl
/daggerdbl/periodcentered/quotesinglbase/quotedblbase/perthousand
/Acircumflex/Ecircumflex/Aacute/Edieresis/Egrave/Iacute/Icircumflex/Idieresis/Igrave
/Oacute/Ocircumflex/apple/Ograve/Uacute/Ucircumflex/Ugrave/dotlessi/circumflex/tilde
/macron/breve/dotaccent/ring/cedilla/hungarumlaut/ogonek/caron
MacEncoding 128 128 getinterval astore pop
level2 startnoload
/copyfontdict
{
findfont dup length dict
begin
{
1 index/FID ne{def}{pop pop}ifelse
}forall
}bd
level2 endnoload level2 not startnoload
/copyfontdict
{
findfont dup length dict
copy
begin
}bd
level2 not endnoload
md/fontname known not{
/fontname/customfont def
}if
/Encoding Z
/:mre
{
copyfontdict
/Encoding MacEncoding def
fontname currentdict
end
definefont :ff def
}bd
/:bsr
{
copyfontdict
/Encoding Encoding 256 array copy def
Encoding dup
}bd
/pd{put dup}bd
/:esr
{
pop pop
fontname currentdict
end
definefont :ff def
}bd
/scf
{
scalefont def
}bd
/scf-non
{
$m scale :mf setfont
}bd
/ps Z
/fz{/ps xs}bd
/sf/setfont ld
/cF/currentfont ld
/mbf
{
/makeblendedfont where
{
pop
makeblendedfont
/ABlend exch definefont
}{
pop
}ifelse
def
}def
%%EndFile
%%BeginFile: adobe_psp_derived_styles
%%Copyright: Copyright 1990-1993 Adobe Systems Incorporated. All Rights Reserved.
/wi
version(23.0)eq
{
{
gS 0 0 0 0 rC stringwidth gR
}bind
}{
/stringwidth load
}ifelse
def
/$o 1. def
/gl{$o G}bd
/ms{:M S}bd
/condensedmtx[.82 0 0 1 0 0]def
/:mc
{
condensedmtx :mf def
}bd
/extendedmtx[1.18 0 0 1 0 0]def
/:me
{
extendedmtx :mf def
}bd
/basefont Z
/basefonto Z
/dxa Z
/dxb Z
/dxc Z
/dxd Z
/dsdx2 Z
/bfproc Z
/:fbase
{
dup/FontType get 0 eq{
dup length dict begin
dup{1 index/FID ne 2 index/UniqueID ne and{def}{pop pop}ifelse}forall
/FDepVector exch/FDepVector get[exch/:fbase load forall]def
}/bfproc load ifelse
/customfont currentdict end definefont
}bd
/:mo
{
/bfproc{
dup dup length 2 add dict
begin
{
1 index/FID ne 2 index/UniqueID ne and{def}{pop pop}ifelse
}forall
/PaintType 2 def
/StrokeWidth .012 0 FontMatrix idtransform pop def
/customfont currentdict
end
definefont
8 dict begin
/basefonto xdf
/basefont xdf
/FontType 3 def
/FontMatrix[1 0 0 1 0 0]def
/FontBBox[0 0 1 1]def
/Encoding StandardEncoding def
/BuildChar
{
exch begin
basefont setfont
( )dup 0 4 -1 roll put
dup wi
setcharwidth
0 0 :M
gS
gl
dup show
gR
basefonto setfont
show
end
}def
}store :fbase
}bd
/:mso
{
/bfproc{
7 dict begin
/basefont xdf
/FontType 3 def
/FontMatrix[1 0 0 1 0 0]def
/FontBBox[0 0 1 1]def
/Encoding StandardEncoding def
/BuildChar
{
exch begin
sD begin
/dxa 1 ps div def
basefont setfont
( )dup 0 4 -1 roll put
dup wi
1 index 0 ne
{
exch dxa add exch
}if
setcharwidth
dup 0 0 ms
dup dxa 0 ms
dup dxa dxa ms
dup 0 dxa ms
gl
dxa 2. div dup ms
end
end
}def
}store :fbase
}bd
/:ms
{
/bfproc{
dup dup length 2 add dict
begin
{
1 index/FID ne 2 index/UniqueID ne and{def}{pop pop}ifelse
}forall
/PaintType 2 def
/StrokeWidth .012 0 FontMatrix idtransform pop def
/customfont currentdict
end
definefont
8 dict begin
/basefonto xdf
/basefont xdf
/FontType 3 def
/FontMatrix[1 0 0 1 0 0]def
/FontBBox[0 0 1 1]def
/Encoding StandardEncoding def
/BuildChar
{
exch begin
sD begin
/dxb .05 def
basefont setfont
( )dup 0 4 -1 roll put
dup wi
exch dup 0 ne
{
dxb add
}if
exch setcharwidth
dup dxb .01 add 0 ms
0 dxb :T
gS
gl
dup 0 0 ms
gR
basefonto setfont
0 0 ms
end
end
}def
}store :fbase
}bd
/:mss
{
/bfproc{
7 dict begin
/basefont xdf
/FontType 3 def
/FontMatrix[1 0 0 1 0 0]def
/FontBBox[0 0 1 1]def
/Encoding StandardEncoding def
/BuildChar
{
exch begin
sD begin
/dxc 1 ps div def
/dsdx2 .05 dxc 2 div add def
basefont setfont
( )dup 0 4 -1 roll put
dup wi
exch dup 0 ne
{
dsdx2 add
}if
exch setcharwidth
dup dsdx2 .01 add 0 ms
0 .05 dxc 2 div sub :T
dup 0 0 ms
dup dxc 0 ms
dup dxc dxc ms
dup 0 dxc ms
gl
dxc 2 div dup ms
end
end
}def
}store :fbase
}bd
/:msb
{
/bfproc{
7 dict begin
/basefont xdf
/FontType 3 def
/FontMatrix[1 0 0 1 0 0]def
/FontBBox[0 0 1 1]def
/Encoding StandardEncoding def
/BuildChar
{
exch begin
sD begin
/dxd .03 def
basefont setfont
( )dup 0 4 -1 roll put
dup wi
1 index 0 ne
{
exch dxd add exch
}if
setcharwidth
dup 0 0 ms
dup dxd 0 ms
dup dxd dxd ms
0 dxd ms
end
end
}def
}store :fbase
}bd
/italicmtx[1 0 -.212557 1 0 0]def
/:mi
{
italicmtx :mf def
}bd
/:v
{
[exch dup/FontMatrix get exch
dup/FontInfo known
{
/FontInfo get
dup/UnderlinePosition known
{
dup/UnderlinePosition get
2 index 0
3 1 roll
transform
exch pop
}{
@.1
}ifelse
3 1 roll
dup/UnderlineThickness known
{
/UnderlineThickness get
exch 0 3 1 roll
transform
exch pop
abs
}{
pop pop .067
}ifelse
}{
pop pop .1 .067
}ifelse
]
}bd
/$t Z
/$p Z
/$s Z
/:p
{
aload pop
2 index mul/$t xs
1 index mul/$p xs
@.012 mul/$s xs
}bd
/:m
{gS
0 $p rm
$t lw
0 rl stroke
gR
}bd
/:n
{
gS
0 $p rm
$t lw
0 rl
gS
gl
stroke
gR
strokepath
$s lw
/setstrokeadjust where{pop
currentstrokeadjust true setstrokeadjust stroke setstrokeadjust
}{
stroke
}ifelse
gR
}bd
/:o
{gS
0 $p rm
$t 2 div dup rm
$t lw
dup 0 rl
stroke
gR
:n
}bd
%%EndFile
/currentpacking where {pop sc_oldpacking setpacking}if
end		% md
%%EndProlog
%%BeginSetup
md begin
countdictstack
[
{%stopped
%%BeginFeature: *ManualFeed False
1 dict dup /ManualFeed false put setpagedevice
%%EndFeature
}featurecleanup
countdictstack
[
{%stopped
%%BeginFeature: *PageSize LetterSmall

    1 dict
    dup /Policies 2 dict dup /PageSize 2 put dup /MediaType 0 put put
	setpagedevice
	2 dict
    dup /PageSize [612 792] put
    dup /ImagingBBox null put
    setpagedevice
%%EndFeature
}featurecleanup
()setjob
/pT[1 0 0 -1 30 761]def/mT[1 0 0 -1 30 761]def
/sD 16 dict def
300 level2{1 dict dup/WaitTimeout 4 -1 roll put setuserparams}{statusdict/waittimeout 3 -1 roll put}ifelse
%%IncludeFont: Times-Roman
%%IncludeFont: Symbol
%%IncludeFont: Times-Bold
%%IncludeFont: Times-Italic
%%IncludeFont: Courier-Bold
%%IncludeFont: Courier-BoldOblique
/f0_1/Times-Roman :mre
/f0_12 f0_1 12 scf
/f0_10 f0_1 10 scf
/f0_9 f0_1 9 scf
/f1_1/Symbol :bsr
240/apple pd
:esr /f1_12 f1_1 12 scf
/f2_1/Times-Bold :mre
/f2_18 f2_1 18 scf
/f2_14 f2_1 14 scf
/f2_12 f2_1 12 scf
/f3_1/Times-Italic :mre
/f3_12 f3_1 12 scf
/f4_1 f1_1 :mi
/f4_12 f4_1 12 scf
/f5_1/Courier-Bold :mre
/f5_10 f5_1 10 scf
/f5_9 f5_1 9 scf
/f9_1/Courier-BoldOblique :mre
/f9_10 f9_1 10 scf
/Courier findfont[10 0 0 -10 0 0]:mf setfont
%%EndSetup
%%Page: 1 1
%%BeginPageSetup
initializepage
(; page: 1 of 10)setjob
%%EndPageSetup
gS 0 0 552 730 rC
504 710 :M
f0_12 sf
(1)S
82 55 :M
f2_18 sf
-.018(Floating-Point and Complex Arithmetic Enhancements)A
177 80 :M
f2_12 sf
-.073(WG14/N657 X3J11/97-)A
295 80 :M
-.06(020 \(Draft 1997-0)A
385 80 :M
-.497(2-0)A
401 80 :M
-.993(7\))A
519 71 1 12 rF
264 104 :M
f0_12 sf
-.11(Jim Thomas)A
54 104 :M
(5)S
246 116 :M
f5_10 sf
(jthomas@best.com)S
96 163 :M
f0_12 sf
@.812 .081(This documents describes potential C9X enhancements related to the floating-point)J
78 175 :M
@.196 .02(and complex arithmetic specifications.  )J
272 175 :M
@.109 .011(Change bars mark changes from)J
429 175 :M
( document N6)S
498 175 :M
(38)S
519 166 1 12 rF
48 175 :M
(1)S
54 175 :M
(0)S
78 187 :M
1.24 .124(in the pre-Kona mailing.  Section numbers refer to C9X )J
369 187 :M
1.14 .114(Draft 8.  Each enhancement)J
519 178 1 12 rF
78 199 :M
-.021(could be accepted or rejected independently.)A
519 190 1 12 rF
78 235 :M
f2_12 sf
1.53 .153(1.  Enhancement:)J
174 235 :M
f0_12 sf
1.297 .13(  Allow as an implementation-defined option the )J
f5_10 sf
@.457(feraiseexcept)A
48 235 :M
f0_12 sf
(1)S
54 235 :M
(5)S
78 247 :M
1.568 .157(function in )J
f5_10 sf
@.544(<fenv.h>)A
f0_12 sf
1.644 .164( to raise the inexact exception whenever it raises overflow or)J
78 259 :M
-.034(underflow.)A
78 283 :M
f2_12 sf
@.396(Rationale:)A
f0_12 sf
1.214 .121(  On some architectures the only practical way to raise an exception is to)J
78 295 :M
@.049 .005(execute an instruction that has the exception as a side-effect.  Any IEC 559 operation that)J
48 295 :M
(2)S
54 295 :M
(0)S
78 307 :M
@.619 .062(raises either overflow or underflow raises inexact too.  This should have little effect on)J
78 319 :M
-.028(use \(except for tests\).)A
78 343 :M
f2_12 sf
-.132(Edits:)A
109 343 :M
f0_12 sf
(  )S
116 343 :M
f3_12 sf
@.125 .012(Add to the Description in 7.x.2.3 of the <fenv.h> section the sentence:)J
457 343 :M
f0_12 sf
@.127 .013(  \322Whether)J
78 355 :M
@.261 .026(the )J
97 355 :M
f5_10 sf
@.101(feraiseexcept)A
f0_12 sf
@.347 .035( function additionally raises the inexact exception whenever it raises)J
48 355 :M
(2)S
54 355 :M
(5)S
78 367 :M
-.009(the overflow or underflow exception is implementation-defined.\323)A
78 403 :M
f2_12 sf
-.043(2.  Enhancement:)A
168 403 :M
f0_12 sf
-.017(  Provide an inquiry macro, )A
f5_10 sf
-.021(isinf\(x\))A
f0_12 sf
-.016(, to test whether )A
430 403 :M
f5_10 sf
-.054(x)A
f0_12 sf
-.04( is an infinity.)A
48 415 :M
(3)S
54 415 :M
(0)S
78 427 :M
f2_12 sf
@.342(Rationale:)A
f0_12 sf
1.112 .111(  It's frequently needed \(e.g. in the sample code for complex multiply and)J
78 439 :M
-.006(divide\).  For some uses, performance will be important and obvious implementations, e.g.)A
78 451 :M
f5_10 sf
@.004(fabsl\(x\)==INFINITY)A
f0_12 sf
@.011 .001(, may be far from optimal.  It's possible for the user to get it wrong,)J
78 463 :M
@.481 .048(e.g. )J
98 463 :M
f5_10 sf
@.124(!isfinite\(x\))A
f0_12 sf
@.341 .034( would be wrong.  There are already inquiries, )J
402 463 :M
f5_10 sf
@.039(isnan)A
f0_12 sf
(, )S
f5_10 sf
@.039(isfinite)A
f0_12 sf
@.107 .011(, and)J
78 475 :M
f5_10 sf
@.421(isnormal)A
f0_12 sf
1.011 .101( to model after.  There's shipping prior art.  \()J
f5_10 sf
@.421(isinfinite)A
f0_12 sf
1.283 .128( might have been)J
48 475 :M
(3)S
54 475 :M
(5)S
78 487 :M
-.074(better style\).)A
78 511 :M
f2_12 sf
-.132(Edits:)A
109 511 :M
f0_12 sf
(  )S
f3_12 sf
-.03(Add the following subclause in 7.)A
275 511 :M
-.006(6.2 of the <math.h> section:)A
519 502 1 12 rF
81 523 :M
f0_12 sf
(  )S
78 535 :M
f2_12 sf
-.024(7.x.2.y  The )A
f5_10 sf
-.03(isinf)A
f2_12 sf
-.036( macro)A
48 535 :M
f0_12 sf
(4)S
54 535 :M
(0)S
78 559 :M
f2_12 sf
-.097(Synopsis)A
114 583 :M
f5_10 sf
(#include <math.h>)S
114 594 :M
-.012(int isinf\()A
f3_12 sf
-.01(floating-type)A
f5_10 sf
( x\);)S
48 594 :M
f0_12 sf
(4)S
54 594 :M
(5)S
78 618 :M
f2_12 sf
-.031(Description)A
96 642 :M
f0_12 sf
1.033 .103(The )J
120 642 :M
f5_10 sf
@.248(isinf)A
f0_12 sf
@.786 .079( macro determines whether its argument value is an infinity \(positive or)J
78 654 :M
1.207 .121(negative\).  First, an argument represented in a format wider than its semantic type is)J
48 654 :M
(5)S
54 654 :M
(0)S
78 666 :M
-.002(converted to its semantic type.  Then determination is based on the type of the argument.)A
endp
%%Page: 2 2
%%BeginPageSetup
initializepage
(; page: 2 of 10)setjob
%%EndPageSetup
gS 0 0 552 730 rC
42 14 :M
f0_12 sf
-.164(WG14/N6)A
92 14 :M
-.055(57 X3J11/97-0)A
164 14 :M
(20)S
418 14 :M
-.199(1997-0)A
452 14 :M
-.497(2-0)A
468 14 :M
(7)S
483 5 1 12 rF
42 722 :M
(2)S
404 722 :M
-.088(Enhancements)A
483 713 1 12 rF
42 50 :M
f2_12 sf
-.13(Return)A
60 74 :M
f0_12 sf
1.033 .103(The )J
85 74 :M
f5_10 sf
@.474(isinf)A
f0_12 sf
1.249 .125( macro returns a nonzero value if and only if its argument value is an)J
42 86 :M
-.041(infinity.)A
18 98 :M
(5)S
42 122 :M
f2_12 sf
2.101 .21(3.  Enhancement:)J
140 122 :M
f0_12 sf
2.783 .278(  Provide a function for )J
279 122 :M
f3_12 sf
1.115 .111(floating multiply-add)J
385 122 :M
f0_12 sf
@.383 .038(:  )J
f5_10 sf
@.618(fma\(x,\312y,\312z\))A
42 134 :M
f0_12 sf
@.717 .072(computes  )J
f5_10 sf
@.248(x\312*\312y\312+\312z)A
f0_12 sf
@.653 .065(  as one ternary operation \(i.e. with just one rounding\).  IEC 559)J
42 146 :M
-.003(implementations must deliver the result with just one IEC 559-style rounding.)A
12 158 :M
(1)S
18 158 :M
(0)S
42 170 :M
f2_12 sf
@.172(Rationale:)A
f0_12 sf
@.577 .058(  In many cases, clever use of floating multiply-add leads to much improved)J
42 182 :M
1.369 .137(code.  However, its unexpected use by the compiler can undermine carefully written)J
42 194 :M
1.923 .192(code.  The )J
104 194 :M
f5_10 sf
@.463(FP_CONTRACT)A
f0_12 sf
1.344 .134( directive in the current floating-point spec can be used to)J
42 206 :M
@.699 .07(disallow use of floating multiply-add.  What's still needed is a way to guarantee its use)J
42 218 :M
@.345 .034(just in particular situations.  Many current machines provide hardware floating multiply-)J
12 218 :M
(1)S
18 218 :M
(5)S
42 230 :M
-.008(add instructions;  software implementation can be used for others.)A
42 254 :M
f2_12 sf
-.132(Edits:)A
73 254 :M
f0_12 sf
(  )S
f3_12 sf
-.017( Insert the following subclause in 7.)A
251 254 :M
-.007(6 in the <math.h> section:)A
483 245 1 12 rF
42 281 :M
f2_14 sf
-.5(7.)A
53 281 :M
-.022(6.y  Floating multiply-add)A
483 269 1 15 rF
12 281 :M
f0_12 sf
(2)S
18 281 :M
(0)S
42 308 :M
f2_12 sf
-.025(7.6.y.1  The )A
f5_10 sf
-.031(fma)A
f2_12 sf
-.03( function)A
483 299 1 12 rF
42 332 :M
-.097(Synopsis)A
12 344 :M
f0_12 sf
(2)S
18 344 :M
(5)S
78 356 :M
f5_10 sf
(#include <math.h>)S
78 367 :M
(double fma\(double x, double y, double z\);)S
42 390 :M
f2_12 sf
-.031(Description)A
12 402 :M
f0_12 sf
(3)S
18 402 :M
(0)S
60 414 :M
1.033 .103(The )J
84 414 :M
f5_10 sf
@.327(fma)A
f0_12 sf
@.972 .097( function computes the sum )J
247 414 :M
f5_10 sf
@.449(z)A
f0_12 sf
1.094 .109( plus the product )J
342 414 :M
f5_10 sf
@.475(x)A
f0_12 sf
@.974 .097( times )J
384 414 :M
f5_10 sf
@.309(y)A
f0_12 sf
@.901 .09(, rounded as one)J
42 426 :M
1.078 .108(ternary operation:  it computes the sum )J
f5_10 sf
@.372(z)A
f0_12 sf
@.892 .089( plus the product )J
f5_10 sf
@.372(x)A
f0_12 sf
@.764 .076( times )J
381 426 :M
f5_10 sf
@.392(y)A
f0_12 sf
@.9 .09( \(as if\) to infinite)J
42 438 :M
2.612 .261(precision and rounds once to the result format, according to the rounding mode)J
42 450 :M
-.02(characterized by the value of )A
184 450 :M
f5_10 sf
(FLT_ROUNDS)S
f0_12 sf
(.)S
12 462 :M
(3)S
18 462 :M
(5)S
42 474 :M
f2_12 sf
-.053(Returns)A
60 498 :M
f0_12 sf
-.219(The )A
82 498 :M
f5_10 sf
(fma)S
f0_12 sf
( function returns the sum )S
224 498 :M
f5_10 sf
(z)S
f0_12 sf
-.011( plus the product )A
f5_10 sf
(x)S
f0_12 sf
-.013( times )A
352 498 :M
f5_10 sf
(y)S
f0_12 sf
@.059 .006(, rounded as one ternary)J
42 510 :M
-.035(operation.)A
12 522 :M
(4)S
18 522 :M
(0)S
78 534 :M
f0_10 sf
-.02([A longer alternative name might be )A
226 534 :M
f5_9 sf
-.448(fmuladd)A
f0_10 sf
-.483(.])A
42 560 :M
f3_12 sf
-.019(Insert the following subclause in )A
202 560 :M
-.054(F.9 of the IEC 559 annex:)A
483 551 1 12 rF
42 590 :M
f2_14 sf
(F)S
51 590 :M
(.9.y  Floating multiply-add)S
483 578 1 15 rF
12 590 :M
f0_12 sf
(4)S
18 590 :M
(5)S
42 617 :M
f2_12 sf
-.038(F.9.y.1  The )A
f5_10 sf
-.047(fma)A
f2_12 sf
-.044( function)A
483 608 1 12 rF
60 641 :M
f5_10 sf
@.268(fma\(x,\312y,\312z\))A
f0_12 sf
@.727 .073( computes the sum )J
233 641 :M
f5_10 sf
@.516(z)A
f0_12 sf
1.258 .126( plus the product )J
331 641 :M
f5_10 sf
@.358(x)A
f0_12 sf
@.707 .071( times )J
f5_10 sf
@.358(y)A
f0_12 sf
1.429 .143(, correctly rounded)J
42 653 :M
-.163(once.)A
12 653 :M
(5)S
18 653 :M
(0)S
endp
%%Page: 3 3
%%BeginPageSetup
initializepage
(; page: 3 of 10)setjob
%%EndPageSetup
gS 0 0 552 730 rC
78 14 :M
f0_12 sf
-.093(Draft 1997-02-0)A
156 14 :M
(7)S
376 14 :M
-.164(WG14/N6)A
426 14 :M
-.055(57 X3J11/97-0)A
498 14 :M
(20)S
519 5 1 12 rF
78 722 :M
-.088(Enhancements)A
504 722 :M
(3)S
519 713 1 12 rF
78 50 :M
(\245)S
96 50 :M
f5_10 sf
@.036(fma\(x,\312y,\312z\))A
f0_12 sf
@.097 .01( returns one of its NaN arguments and raises no exception if )J
f5_10 sf
(x)S
f0_12 sf
@.04 .004( or )J
f5_10 sf
(y)S
f0_12 sf
@.049 .005( is a)J
78 62 :M
-.217(NaN.)A
78 74 :M
(\245)S
96 74 :M
f5_10 sf
@.184(fma\(x,\312y,\312z\))A
f0_12 sf
@.501 .05( returns a NaN and optionally raises the invalid exception if one of )J
504 74 :M
f5_10 sf
(x)S
78 86 :M
f0_12 sf
-.035(and )A
f5_10 sf
(y)S
f0_12 sf
-.03( is infinite, the other is zero, and )A
262 86 :M
f5_10 sf
-.109(z)A
f0_12 sf
-.097( is a NaN.)A
78 98 :M
(\245)S
96 98 :M
f5_10 sf
@.362(fma\(x,\312y,\312z\))A
f0_12 sf
@.919 .092( returns a NaN and raises the invalid exception if one of )J
f5_10 sf
@.362(x)A
f0_12 sf
@.562 .056( and )J
f5_10 sf
@.362(y)A
f0_12 sf
@.553 .055( is)J
54 98 :M
(5)S
78 110 :M
-.029(infinite, the other is zero, and )A
222 110 :M
f5_10 sf
(z)S
f0_12 sf
-.022( is not a NaN.)A
78 122 :M
(\245)S
96 122 :M
f5_10 sf
@.06(fma\(x,\312y,\312z\))A
f0_12 sf
@.16 .016( returns a NaN and raises the invalid exception if )J
410 122 :M
f5_10 sf
(x)S
f0_12 sf
( times )S
449 122 :M
f5_10 sf
(y)S
f0_12 sf
@.079 .008( is an exact)J
78 134 :M
-.055(infinity and )A
137 134 :M
f5_10 sf
(z)S
f0_12 sf
-.02( is also an infinity but with the opposite sign.)A
81 146 :M
(    )S
78 158 :M
f3_12 sf
@.88 .088(Include fma in the list of <math.h> \(but not <complex.h>\) functions that have a type-)J
48 158 :M
f0_12 sf
(1)S
54 158 :M
(0)S
78 170 :M
f3_12 sf
-.049(generic macro.)A
519 173 1 12 rF
78 194 :M
-.023(In 7.6, paragraph [1], sentence [2], change)A
288 194 :M
f0_12 sf
-.074( \322one or two\323 )A
356 194 :M
f3_12 sf
-.053(to)A
f0_12 sf
-.061( \322one or more\323.)A
519 185 1 12 rF
48 218 :M
(1)S
54 218 :M
(5)S
78 230 :M
f2_12 sf
@.588 .059(4.  Enhancement:  )J
178 230 :M
f0_12 sf
@.513 .051(Change the corresponding real type for the imaginary unit from the)J
78 242 :M
-.01(narrowest floating type for expression evaluation to the )A
347 242 :M
f5_10 sf
-.069(float)A
f0_12 sf
-.061( type.)A
78 266 :M
f2_12 sf
-.012(Rationale:  )A
f0_12 sf
-.012(This change assures reasonable presumable properties such as)A
48 278 :M
(2)S
54 278 :M
(0)S
114 290 :M
f5_10 sf
(sizeof\(I * y\) == sizeof\(y\))S
114 301 :M
(sizeof\(z\) == sizeof\(creal\(z\) + I * cimag\(z\)\))S
78 324 :M
f0_12 sf
@.038 .004(It enhances consistency in that use of )J
261 324 :M
f5_10 sf
(I)S
f0_12 sf
@.061 .006( for algorithmic or notational convenience will not)J
78 336 :M
@.259 .026(result in widening types.  Without the change, codes that depend on the semantic type of)J
48 336 :M
(2)S
54 336 :M
(5)S
78 348 :M
1.067 .107(imaginary or complex expressions would potentially encounter problems when ported)J
78 360 :M
@.743 .074(between implementations using different expression evaluation methods. Although this)J
78 372 :M
-.009(might not be a big problem, there appears to be no benefit in retaining the current spec.)A
78 396 :M
f2_12 sf
-.132(Edits:)A
109 396 :M
f0_12 sf
1.905 .19(  )J
120 396 :M
f3_12 sf
1.568 .157(In 7.7 Complex arithmetic, replace)J
f0_12 sf
1.219 .122( \322... whose corresponding real type is the)J
519 387 1 12 rF
48 396 :M
(3)S
54 396 :M
(0)S
78 410 :M
3.552 .355(narrowest real floating type used for expression evaluation)J
406 407 :M
f0_9 sf
(1)S
410 410 :M
f0_12 sf
5.158 .516(\323 )J
425 410 :M
f3_12 sf
-.224(with)A
446 410 :M
f0_12 sf
4.339 .434( \322... whose)J
78 422 :M
-.015(corresponding real type is )A
f5_10 sf
-.02(float)A
f0_12 sf
(\323)S
f3_12 sf
-.016(, removing the footnote.)A
78 458 :M
f2_12 sf
@.294 .029(5.   Enhancement:)J
173 458 :M
f0_12 sf
@.222 .022(  Make )J
f5_10 sf
@.136(imaginary)A
f0_12 sf
@.392 .039( a keyword token in the normative standard.  Like)J
48 458 :M
(3)S
54 458 :M
(5)S
78 470 :M
f5_10 sf
@.096(complex)A
f0_12 sf
@.268 .027(, it would become a keyword just in translation units that include )J
f5_10 sf
@.096(<complex.h>)A
f0_12 sf
(.)S
78 482 :M
-.017(The imaginary types per se would remain non-normative.)A
78 506 :M
f2_12 sf
@.459(Rationale:)A
f0_12 sf
1.87 .187(  This allows implementing the complex arithmetic \(informative\) annex)J
78 518 :M
-.01(without breaking conformance with the normative standard.)A
48 518 :M
(4)S
54 518 :M
(0)S
78 542 :M
f2_12 sf
-.095(Edits:  )A
115 542 :M
f3_12 sf
-.01(In 6.1.1 [2], add )A
f5_10 sf
-.013(imaginary)A
f3_12 sf
-.01( to the list of keyword tokens.)A
78 566 :M
-.029(Replace 6.1.1 [3] with:)A
48 578 :M
f0_12 sf
(4)S
54 578 :M
(5)S
96 590 :M
@.493 .049(Where reserved, the above tokens \(entirely in lowercase\) are reserved \(in translation)J
78 602 :M
1.209 .121(phases 7 and 8\) for use as keywords, and shall not be used otherwise.  The keyword)J
78 614 :M
1.671 .167(tokens )J
116 614 :M
f5_10 sf
@.589(complex)A
f0_12 sf
@.917 .092( and )J
f5_10 sf
@.589(imaginary)A
f0_12 sf
1.803 .18( are reserved in translation units where the header)J
78 626 :M
f5_10 sf
@.939(<complex.h>)A
f0_12 sf
2.246 .225( is included, but not otherwise;  if one of the tokens )J
444 626 :M
f5_10 sf
@.355(complex)A
f0_12 sf
@.924 .092( and)J
78 638 :M
f5_10 sf
@.279(imaginary)A
f0_12 sf
@.763 .076( is used prior to the first inclusion of the header, the behavior is undefined.)J
48 638 :M
(5)S
54 638 :M
(0)S
78 650 :M
-.014(All other keyword tokens are reserved in all translation units.)A
78 662 :M
(                                                )S
78 659.48 -.48 .48 222.48 659 .48 78 659 @a
78 673 :M
f0_9 sf
(1)S
82 676 :M
f0_10 sf
-.089(  If )A
f5_9 sf
-.169(FLT_EVAL_METHOD)A
f0_10 sf
-.114( equals 0, 1, or 2, then )A
f5_9 sf
-.169(_Imaginary_I)A
f0_10 sf
-.127( has the corresponding real type )A
452 676 :M
f5_9 sf
-.456(float)A
f0_10 sf
(,)S
78 687 :M
f5_9 sf
-.256(double)A
f0_10 sf
-.158(, or)A
f5_9 sf
-.256( )A
f5_10 sf
-.284(l)A
f5_9 sf
-.256(ong\312double)A
f0_10 sf
-.189(, respectively.)A
endp
%%Page: 4 4
%%BeginPageSetup
initializepage
(; page: 4 of 10)setjob
%%EndPageSetup
gS 0 0 552 730 rC
42 14 :M
f0_12 sf
-.164(WG14/N6)A
92 14 :M
-.055(57 X3J11/97-0)A
164 14 :M
(20)S
418 14 :M
-.199(1997-0)A
452 14 :M
-.497(2-0)A
468 14 :M
(7)S
483 5 1 12 rF
42 722 :M
(4)S
404 722 :M
-.088(Enhancements)A
483 713 1 12 rF
42 62 :M
f3_12 sf
-.162(Remove )A
83 62 :M
(G)S
92 62 :M
-.003(.2 from the complex arithmetic annex \(and renumber subsequent subclauses\).)A
483 53 1 12 rF
42 86 :M
@.246 .025(At the beginning of the first paragraph in G)J
256 86 :M
@.222 .022(.3 \(before renumbering\), insert the sentence:)J
483 77 1 12 rF
42 98 :M
f0_12 sf
-.025(\322Inclusion of the header )A
161 98 :M
f5_10 sf
-.005(<complex.h>)A
f0_12 sf
-.004( enables designations for imaginary types.\323)A
18 98 :M
(5)S
42 134 :M
f2_12 sf
@.238 .024(6.  Enhancement:  )J
140 134 :M
f0_12 sf
@.069 .007(Replace the current )J
f5_10 sf
@.146 .015(scalb\(double, long\))J
352 134 :M
f0_12 sf
@.183 .018( function with the pair of)J
42 146 :M
@.708 .071(functions )J
92 146 :M
f5_10 sf
1.154 .115(scalbn\(double, int\))J
f0_12 sf
@.274 .027( and )J
f5_10 sf
1.233 .123(scalb\(double, double\))J
364 146 :M
f0_12 sf
1.187 .119(, and provide the )J
f5_10 sf
@.741(int)A
483 137 1 12 rF
42 158 :M
f0_12 sf
-.123(function )A
85 158 :M
f5_10 sf
-.024(ilogb)A
f0_12 sf
-.018( in addition to the current )A
240 158 :M
f5_10 sf
-.072(double)A
f0_12 sf
-.061( function )A
322 158 :M
f5_10 sf
(logb)S
f0_12 sf
(.)S
12 158 :M
(1)S
18 158 :M
(0)S
42 182 :M
f2_12 sf
2.157 .216(Rationale:  )J
107 182 :M
f5_10 sf
1.01 .101(scalb\(double, double\))J
237 182 :M
f0_12 sf
1.322 .132( and )J
f5_10 sf
@.85(ilogb)A
f0_12 sf
2.208 .221( are in XPG4 V2 and are widely)J
42 194 :M
1.401 .14(implemented.  Some applications are better served by a floating second argument to)J
42 206 :M
f5_10 sf
-.174(scalb)A
f0_12 sf
([)S
76 206 :M
f5_10 sf
@.18(n)A
f0_12 sf
@.505 .05(], others by an integral one, and similarly regarding the return type for [)J
437 206 :M
f5_10 sf
-.595(i)A
f0_12 sf
(])S
447 206 :M
f5_10 sf
(logb)S
f0_12 sf
(.)S
42 218 :M
@.832 .083(The transition problems for early C9X implementors and users is mitigated by the fact)J
12 218 :M
(1)S
18 218 :M
(5)S
42 230 :M
@.718 .072(that )J
65 230 :M
@.935 .093(\(almost all\) calls to )J
167 230 :M
f5_10 sf
@.176(scalb\(double,\312long\))A
f0_12 sf
@.616 .062( would still work \(after recompilation\))J
483 221 1 12 rF
42 242 :M
-.004(when silently replaced by calls to )A
f5_10 sf
-.005(scalb\(double,\312double\))A
f0_12 sf
(.)S
42 266 :M
f2_12 sf
-.132(Edits:)A
73 266 :M
f0_12 sf
@.053 .005(  )J
f3_12 sf
@.317 .032(Change the name of the current scalb function to:  )J
f5_10 sf
@.117(scalbn)A
f3_12 sf
@.106 .011(. )J
373 266 :M
@.265 .027(Replace the synopsis)J
483 257 1 12 rF
42 278 :M
-.094(for the )A
77 278 :M
-.028(old scalb function with:)A
483 269 1 12 rF
12 278 :M
f0_12 sf
(2)S
18 278 :M
(0)S
483 281 1 12 rF
78 302 :M
f5_10 sf
(#include <math.h>)S
483 293 1 11 rF
78 313 :M
(double scalbn\(double x, int n\);)S
483 304 1 11 rF
78 324 :M
(long double scalbnl\(long double x, long int n\);)S
483 315 1 11 rF
483 326 1 11 rF
12 335 :M
f0_12 sf
(2)S
18 335 :M
(5)S
42 346 :M
f3_12 sf
-.023(Throughout, replace references to the old )A
245 346 :M
f9_10 sf
-.011(scalb)A
f3_12 sf
-.008( function with ones to )A
f9_10 sf
-.011(scalbn)A
f3_12 sf
(.)S
42 370 :M
-.018(Insert the following subclause in 7.)A
211 370 :M
-.006(6.6 of the <math.h> section:)A
483 361 1 12 rF
42 394 :M
f2_12 sf
-.023(7.6.6.y  The )A
f5_10 sf
-.028(scalb)A
f2_12 sf
-.027( function)A
483 385 1 12 rF
12 394 :M
f0_12 sf
(3)S
18 394 :M
(0)S
42 418 :M
f2_12 sf
-.097(Synopsis)A
78 442 :M
f5_10 sf
(#include <math.h>)S
78 453 :M
(double scalb\(double x, double y\);)S
12 453 :M
f0_12 sf
(3)S
18 453 :M
(5)S
42 476 :M
f2_12 sf
-.031(Description)A
60 503 :M
f0_12 sf
2.572 .257(The )J
86 503 :M
f5_10 sf
@.482(scalb)A
f0_12 sf
1.588 .159( function computes )J
222 503 :M
f5_10 sf
@.691(x\312*\312FLT_RADIX)A
0 -3 rm
@.691(y)A
0 3 rm
f0_12 sf
1.788 .179(, for integral values )J
f5_10 sf
@.691(y)A
f0_12 sf
@.657 .066(.  If )J
453 503 :M
f5_10 sf
1.059(y)A
f0_12 sf
1.618 .162( is)J
42 515 :M
-.002(nonintegral, the result is implementation-defined.  A range error may occur.)A
12 515 :M
(4)S
18 515 :M
(0)S
42 539 :M
f2_12 sf
-.053(Returns)A
60 566 :M
f0_12 sf
-.219(The )A
82 566 :M
f5_10 sf
-.033(scalb)A
f0_12 sf
-.026( function returns the value of )A
254 566 :M
f5_10 sf
-.008(x\312*\312FLT_RADIX)A
0 -3 rm
(y)S
0 3 rm
f0_12 sf
-.006(, for integral values )A
f5_10 sf
(y)S
f0_12 sf
(.)S
12 578 :M
(4)S
18 578 :M
(5)S
42 590 :M
f3_12 sf
-.019(Insert the following subclause in )A
202 590 :M
-.265(F.9.3:)A
483 581 1 12 rF
42 617 :M
f2_12 sf
-.034(F.9.3.y  The )A
f5_10 sf
-.042(scalb)A
f2_12 sf
-.04( function)A
483 608 1 12 rF
42 641 :M
f0_12 sf
(\245)S
60 641 :M
f5_10 sf
-.023(scalb\(-x, y\))A
f0_12 sf
-.018( and )A
f5_10 sf
-.023(-scalb\(x, y\))A
f0_12 sf
-.019( are equivalent.)A
12 641 :M
(5)S
18 641 :M
(0)S
42 653 :M
(\245)S
60 653 :M
f5_10 sf
-.024(scalb\(x, y\))A
f0_12 sf
-.02( returns a NaN if )A
210 653 :M
f5_10 sf
(y)S
f0_12 sf
-.04( is nonintegral.)A
42 665 :M
(\245)S
60 665 :M
f5_10 sf
-.052(scalb\(x, )A
f0_12 sf
cF f1_12 sf
-.108(\261)A
sf
-.108(0)A
127 665 :M
f5_10 sf
(\))S
f0_12 sf
-.025( returns )A
f5_10 sf
(x)S
f0_12 sf
(.)S
42 677 :M
(\245)S
60 677 :M
f5_10 sf
-.093(scalb\()A
f0_12 sf
-.199(+0)A
109 677 :M
f5_10 sf
-.244(, )A
f0_12 sf
(+)S
128 677 :M
cF f1_12 sf
(\245)S
sf
137 677 :M
f5_10 sf
(\))S
f0_12 sf
-.012( returns a NaN and raises the invalid exception.)A
483 668 1 12 rF
endp
%%Page: 5 5
%%BeginPageSetup
initializepage
(; page: 5 of 10)setjob
%%EndPageSetup
gS 0 0 552 730 rC
78 14 :M
f0_12 sf
-.093(Draft 1997-02-0)A
156 14 :M
(7)S
376 14 :M
-.164(WG14/N6)A
426 14 :M
-.055(57 X3J11/97-0)A
498 14 :M
(20)S
519 5 1 12 rF
78 722 :M
-.088(Enhancements)A
504 722 :M
(5)S
519 713 1 12 rF
78 50 :M
(\245)S
96 50 :M
f5_10 sf
-.093(scalb\()A
f0_12 sf
-.199(+0)A
145 50 :M
f5_10 sf
-.031(, y\))A
f0_12 sf
-.023( returns +0, for integral )A
284 50 :M
f5_10 sf
-.245(y)A
f0_12 sf
-.261( < )A
303 50 :M
(+)S
310 50 :M
cF f1_12 sf
(\245)S
sf
319 50 :M
(.)S
519 41 1 12 rF
78 62 :M
(\245)S
96 62 :M
f5_10 sf
-.106(scalb\()A
f0_12 sf
(+)S
139 62 :M
cF f1_12 sf
(\245)S
sf
148 62 :M
f5_10 sf
-.092(, y\))A
f0_12 sf
-.079( returns +)A
218 62 :M
cF f1_12 sf
(\245)S
sf
227 62 :M
-.045(, for integral )A
290 62 :M
f5_10 sf
-.245(y)A
f0_12 sf
-.261( > )A
309 62 :M
(-)S
313 62 :M
cF f1_12 sf
(\245)S
sf
322 62 :M
(.)S
519 53 1 12 rF
78 74 :M
(\245)S
96 74 :M
f5_10 sf
-.101(scalb\(x, )A
f0_12 sf
(-)S
154 74 :M
cF f1_12 sf
(\245)S
sf
163 74 :M
f5_10 sf
(\))S
f0_12 sf
-.017( returns +0, for finite positive-signed )A
349 74 :M
f5_10 sf
(x)S
f0_12 sf
(.)S
519 65 1 12 rF
78 86 :M
(\245)S
96 86 :M
f5_10 sf
-.074(scalb\(x, )A
f0_12 sf
(+)S
157 86 :M
cF f1_12 sf
(\245)S
sf
166 86 :M
f5_10 sf
-.124(\))A
f0_12 sf
-.106( returns +)A
218 86 :M
cF f1_12 sf
(\245)S
sf
227 86 :M
-.07(, for positive )A
291 86 :M
f5_10 sf
(x)S
f0_12 sf
(.)S
519 77 1 12 rF
78 98 :M
(\245)S
96 98 :M
f5_10 sf
-.106(scalb\()A
f0_12 sf
(+)S
139 98 :M
cF f1_12 sf
(\245)S
sf
148 98 :M
f5_10 sf
-.595(,)A
f0_12 sf
(-)S
158 98 :M
cF f1_12 sf
(\245)S
sf
167 98 :M
f5_10 sf
(\))S
f0_12 sf
-.019( returns a NaN.)A
519 89 1 12 rF
54 98 :M
(5)S
78 110 :M
(\245)S
96 110 :M
f5_10 sf
-.024(scalb\(x, y\))A
f0_12 sf
-.019( returns a NaN, if )A
249 110 :M
f5_10 sf
-.27(x)A
f0_12 sf
-.24( or )A
271 110 :M
f5_10 sf
-.109(y)A
f0_12 sf
-.097( is a NaN.)A
78 134 :M
f3_12 sf
@.504 .05(Include scalb in the list of <math.h> \(but not <complex.h>\) functions that have a type-)J
78 146 :M
-.049(generic macro.)A
48 158 :M
f0_12 sf
(1)S
54 158 :M
(0)S
78 170 :M
f3_12 sf
-.018(Insert the following subclause in 7.)A
247 170 :M
-.331(6.6:)A
519 161 1 12 rF
78 194 :M
f2_12 sf
-.023(7.6.6.y  The )A
f5_10 sf
-.028(ilogb)A
f2_12 sf
-.027( function)A
519 185 1 12 rF
78 218 :M
-.097(Synopsis)A
48 218 :M
f0_12 sf
(1)S
54 218 :M
(5)S
114 242 :M
f5_10 sf
(#include <math.h>)S
114 253 :M
(int ilogb\(double x\);)S
519 244 1 11 rF
78 276 :M
f2_12 sf
-.031(Description)A
48 276 :M
f0_12 sf
(2)S
54 276 :M
(0)S
96 300 :M
@.208 .021(The )J
f5_10 sf
@.081(ilogb)A
f0_12 sf
@.232 .023( function extracts the exponent of )J
f5_10 sf
@.081(x)A
f0_12 sf
@.152 .015( as a signed )J
381 300 :M
f5_10 sf
@.081(int)A
f0_12 sf
@.198 .02( value.  It is equivalent)J
78 312 :M
(to )S
f5_10 sf
(\(int\)logb\(x\))S
f0_12 sf
(, for finite nonzero )S
f5_10 sf
(x)S
f0_12 sf
(;  it computes the value )S
377 312 :M
f5_10 sf
-.06(INT_MIN)A
f0_12 sf
-.033( if )A
f5_10 sf
-.06(x)A
f0_12 sf
-.05( is zero)A
474 312 :M
-.041(;  and it)A
519 303 1 12 rF
78 324 :M
-.035(computes the value )A
174 324 :M
f5_10 sf
-.053(INT_MAX)A
f0_12 sf
-.029( if )A
f5_10 sf
-.053(x)A
f0_12 sf
-.039( is infinite)A
284 324 :M
-.108( or NaN)A
323 324 :M
(.)S
519 315 1 12 rF
48 336 :M
(2)S
54 336 :M
(5)S
114 348 :M
f0_10 sf
-.005([This specification differs from both X/Open and Sun's fdlibm \()A
370 348 :M
-.007(for which X/Open granted a)A
519 339 1 11 rF
114 359 :M
-.06(permanent waiver)A
186 359 :M
-.106(\):)A
519 350 1 11 rF
519 361 1 11 rF
132 380 :M
f5_9 sf
-.404(X/Open  ilogb\(0\) =  INT_MIN, ilogb\(NaN\) = INT_MIN, ilogb\(+/-Inf\) = INT_MAX)A
519 372 1 10 rF
132 390 :M
-.404(fdlibm  ilogb\(0\) = -INT_MAX, ilogb\(NaN\) = INT_MAX, ilogb\(+/-Inf\) = INT_MAX)A
519 382 1 10 rF
48 390 :M
f0_12 sf
(3)S
54 390 :M
(0)S
132 400 :M
f5_9 sf
-.404(C9X     ilogb\(0\) =  INT_MIN, ilogb\(NaN\) = INT_MAX, ilogb\(+/-Inf\) = INT_MAX)A
519 392 1 10 rF
519 402 1 11 rF
114 422 :M
f0_10 sf
1.502 .15(The )J
135 422 :M
@.782 .078(value )J
f5_9 sf
@.28(INT_MAX)A
f0_10 sf
@.49 .049( for both )J
240 422 :M
1.153 .115(NaN and infinite )J
316 422 :M
@.563 .056(arguments is)J
369 422 :M
1.024 .102( more convenient)J
443 422 :M
1.5 .15( )J
449 422 :M
-.328(for)A
461 422 :M
1.23 .123( both)J
519 413 1 11 rF
114 433 :M
-.025(implementation and use)A
210 433 :M
-.005(;  the implementation can )A
315 433 :M
@.009 .001(simply test for a maximum exponent;  the)J
519 424 1 11 rF
114 444 :M
@.689 .069(user can test for )J
185 444 :M
f5_9 sf
@.159(INT_MAX)A
f0_10 sf
@.42 .042( to determine the argument is not a finite number.)J
429 444 :M
@.5 .05( )J
433 444 :M
@.5 .05( )J
437 444 :M
f5_9 sf
-.307(INT_MIN)A
f0_10 sf
( )S
476 444 :M
-.667(is)A
519 435 1 11 rF
48 444 :M
f0_12 sf
(3)S
54 444 :M
(5)S
114 455 :M
f0_10 sf
-.031(more natural than the expression )A
247 455 :M
f5_9 sf
-.221(-INT_MAX)A
f0_10 sf
-.149(, for testing for a )A
356 455 :M
-.074(zero argument.)A
416 455 :M
(])S
519 446 1 11 rF
519 457 1 12 rF
78 478 :M
f2_12 sf
-.053(Returns)A
96 502 :M
f0_12 sf
-.219(The )A
118 502 :M
f5_10 sf
-.029(ilogb)A
f0_12 sf
-.024( function returns the exponent of )A
308 502 :M
f5_10 sf
-.06(x)A
f0_12 sf
-.049( as a signed )A
373 502 :M
f5_10 sf
-.118(int)A
f0_12 sf
-.105( value.)A
48 502 :M
(4)S
54 502 :M
(0)S
519 505 1 12 rF
78 526 :M
f3_12 sf
-.014(If enhancement [6] but not [12] is accepted, )A
294 526 :M
-.045(in 7.6, paragraph [1], )A
403 526 :M
(insert after the second)S
519 517 1 12 rF
78 538 :M
-.037(sentence:)A
519 529 1 12 rF
519 541 1 12 rF
78 562 :M
f0_12 sf
(For the functions )S
164 562 :M
f5_10 sf
-.019(ilogb)A
f0_12 sf
-.014(, there are functions )A
f5_10 sf
-.019(ilogbf)A
f0_12 sf
-.018( and )A
352 562 :M
f5_10 sf
-.023(ilogbl)A
f0_12 sf
-.02( which are corresponding)A
519 553 1 12 rF
48 562 :M
(4)S
54 562 :M
(5)S
78 574 :M
-.07(functions with )A
150 574 :M
f5_10 sf
-.044(float)A
f0_12 sf
-.034( and )A
f5_10 sf
-.044(long double)A
f0_12 sf
-.041( arguments.)A
519 565 1 12 rF
78 610 :M
f2_12 sf
@.769 .077(7.  Enhancement:  )J
f0_12 sf
1.062 .106(Identify )J
222 610 :M
f5_10 sf
@.213(x\312/\312x)A
f0_12 sf
@.097 .01( )J
f0_10 sf
@.145(-->)A
f0_12 sf
@.106 .011( )J
273 610 :M
f5_10 sf
@.284(1.0)A
f0_12 sf
@.802 .08( as an invalid optimizations, in the IEC 559)J
78 622 :M
-.13(annex.)A
48 622 :M
(5)S
54 622 :M
(0)S
78 646 :M
f2_12 sf
2.548 .255(Rationale:  )J
f0_12 sf
2.679 .268(Some compilers do this optimization, which is invalid for IEC 559)J
78 658 :M
-.025(implementations if )A
f5_10 sf
(x)S
f0_12 sf
-.024( can be zero, infinite, or NaN.)A
endp
%%Page: 6 6
%%BeginPageSetup
initializepage
(; page: 6 of 10)setjob
%%EndPageSetup
gS 0 0 552 730 rC
42 14 :M
f0_12 sf
-.164(WG14/N6)A
92 14 :M
-.055(57 X3J11/97-0)A
164 14 :M
(20)S
418 14 :M
-.199(1997-0)A
452 14 :M
-.497(2-0)A
468 14 :M
(7)S
483 5 1 12 rF
42 722 :M
(6)S
404 722 :M
-.088(Enhancements)A
483 713 1 12 rF
42 50 :M
f2_12 sf
-.132(Edits:)A
73 50 :M
f0_12 sf
-.157(  )A
f3_12 sf
-.34(In )A
92 50 :M
-.036(F.8.2, add the item)A
483 41 1 12 rF
42 74 :M
f5_10 sf
-.026(x\312/\312x)A
f0_12 sf
( )S
f0_10 sf
-.017(-->)A
f0_12 sf
( )S
f5_10 sf
-.038(1.0)A
150 74 :M
f0_12 sf
@.104 .01(The expressions )J
232 74 :M
f5_10 sf
@.019(x\312/\312x)A
f0_12 sf
@.03 .003( and )J
f5_10 sf
@.019(1.0)A
f0_12 sf
@.045 .005( are not equivalent if )J
f5_10 sf
(x)S
f0_12 sf
@.047 .005( can be zero,)J
150 86 :M
-.019(infinite, of NaN.)A
18 98 :M
(5)S
42 122 :M
f2_12 sf
@.555 .055(8.  )J
f0_12 sf
1.564 .156(The proposal to provide the )J
207 122 :M
f5_10 sf
@.247(cis)A
f0_12 sf
@.972 .097( function, defined by cis\(x\)\312=\312cos\(x\)\312+\312i*sin\(x\), to)J
483 113 1 12 rF
42 134 :M
f5_10 sf
@.717(<complex.h>)A
f0_12 sf
2.029 .203( is being withdrawn, based on insufficient need:  )J
381 134 :M
f5_10 sf
@.54(cis\(x\))A
f0_12 sf
1.532 .153( should be)J
483 125 1 12 rF
42 146 :M
@.446 .045(equivalent to )J
f5_10 sf
@.139(cexp\(I*x\))A
f0_12 sf
@.465 .046(.  Rationale might encourage implementors to optimize for this)J
483 137 1 12 rF
42 158 :M
-.331(use.)A
483 149 1 12 rF
12 158 :M
(1)S
18 158 :M
(0)S
483 161 1 12 rF
483 173 1 12 rF
42 194 :M
f2_12 sf
-.043(9.  Enhancement:)A
132 194 :M
f0_12 sf
-.076(  Provide the )A
196 194 :M
f5_10 sf
-.045(cbrt)A
f0_12 sf
-.037( \(cube root\) function.)A
483 185 1 12 rF
483 197 1 12 rF
42 218 :M
f2_12 sf
@.834(Rationale:)A
f0_12 sf
2.455 .246(  It is specified in XPG4 V2 and is widely implemented.  For some)J
483 209 1 12 rF
12 218 :M
(1)S
18 218 :M
(5)S
42 230 :M
1.94 .194(applications, a true cube root function)J
242 230 :M
2.092 .209(, which returns negative results for negative)J
483 221 1 12 rF
42 242 :M
-.098(arguments, )A
98 242 :M
-.039(is more appropriate than )A
218 242 :M
f5_10 sf
-.036(pow\(x, 1.0/3.0\))A
f0_12 sf
-.031(, which returns NaN for )A
425 242 :M
f5_10 sf
-.292(x)A
f0_12 sf
-.475(\312<)A
441 242 :M
(\3120.)S
483 233 1 12 rF
483 245 1 12 rF
42 266 :M
1.397 .14(The proposal for Bessel functions)J
215 266 :M
1.553 .155(, also specified by XPG4 V2, is being withdrawn,)J
483 257 1 12 rF
42 278 :M
-.063(because the)A
98 278 :M
-.027(y're believed to be insufficiently useful)A
285 278 :M
(.)S
483 269 1 12 rF
12 278 :M
(2)S
18 278 :M
(0)S
483 281 1 12 rF
42 302 :M
f2_12 sf
-.132(Edits:)A
73 302 :M
f0_12 sf
-.157(  )A
f3_12 sf
-.34(In )A
92 302 :M
-.047(7.6.7, add the )A
161 302 :M
-.035(subclause:)A
483 293 1 12 rF
483 305 1 15 rF
42 329 :M
f2_12 sf
-.024(7.6.7.x  The )A
f5_10 sf
-.03(cbrt)A
f2_12 sf
-.028( function)A
483 320 1 12 rF
483 332 1 12 rF
12 341 :M
f0_12 sf
(2)S
18 341 :M
(5)S
42 353 :M
f2_12 sf
-.097(Synopsis)A
483 344 1 12 rF
483 356 1 12 rF
78 377 :M
f5_10 sf
(#include <math.h>)S
483 368 1 11 rF
78 388 :M
(double cbrt\(double x\);)S
483 379 1 11 rF
483 390 1 12 rF
12 399 :M
f0_12 sf
(3)S
18 399 :M
(0)S
42 411 :M
f2_12 sf
-.031(Description)A
483 402 1 12 rF
483 414 1 12 rF
60 435 :M
f0_12 sf
-.219(The )A
82 435 :M
f5_10 sf
-.049(cbrt)A
f0_12 sf
-.043( function computes )A
201 435 :M
-.22(the )A
219 435 :M
(r)S
223 435 :M
-.329(eal )A
240 435 :M
-.088(cube root of)A
298 435 :M
( )S
f5_10 sf
(x)S
f0_12 sf
(.)S
483 426 1 12 rF
483 438 1 12 rF
42 459 :M
f2_12 sf
-.053(Returns)A
483 450 1 12 rF
12 459 :M
f0_12 sf
(3)S
18 459 :M
(5)S
483 462 1 12 rF
60 483 :M
-.219(The )A
82 483 :M
f5_10 sf
-.046(cbrt)A
f0_12 sf
-.037( function returns the )A
206 483 :M
-.053(value of the )A
266 483 :M
-.122(cube root)A
311 483 :M
(.)S
483 474 1 12 rF
483 486 1 12 rF
42 507 :M
f3_12 sf
-.019(Insert the following subclause in )A
202 507 :M
-.265(F.9.4:)A
483 498 1 12 rF
483 510 1 15 rF
12 522 :M
f0_12 sf
(4)S
18 522 :M
(0)S
42 534 :M
f2_12 sf
-.036(F.9.4.y  The )A
f5_10 sf
-.044(cbrt)A
f2_12 sf
-.042( function)A
483 525 1 12 rF
483 537 1 12 rF
42 558 :M
f0_12 sf
(\245)S
60 558 :M
f5_10 sf
-.052(cbrt\()A
f0_12 sf
-.067(+)A
cF f1_12 sf
-.067(\245)A
sf
f5_10 sf
-.052(\))A
f0_12 sf
-.046( returns +)A
cF f1_12 sf
-.046(\245)A
sf
-.046(.)A
483 549 1 12 rF
42 570 :M
(\245)S
60 570 :M
f5_10 sf
-.076(cbrt\()A
f0_12 sf
-.159(-)A
cF f1_12 sf
-.159(\245)A
sf
103 570 :M
f5_10 sf
-.085(\))A
f0_12 sf
-.07( returns -)A
cF f1_12 sf
-.07(\245)A
sf
-.07(.)A
483 561 1 12 rF
42 582 :M
(\245)S
60 582 :M
f5_10 sf
-.107(cbrt\()A
f0_12 sf
-.227(+0)A
103 582 :M
f5_10 sf
(\))S
f0_12 sf
-.006( returns +0.)A
483 573 1 12 rF
12 582 :M
(4)S
18 582 :M
(5)S
42 594 :M
(\245)S
60 594 :M
f5_10 sf
-.148(cbrt\()A
f0_12 sf
-.246(-0)A
100 594 :M
f5_10 sf
(\))S
f0_12 sf
-.025( returns -0.)A
483 585 1 12 rF
483 597 1 12 rF
42 618 :M
f3_12 sf
@.817 .082(Include cbrt in the list of <math.h> \(but not <complex.h>\) functions that have a type-)J
483 609 1 12 rF
42 630 :M
-.049(generic macro.)A
483 621 1 12 rF
483 633 1 12 rF
12 642 :M
f0_12 sf
(5)S
18 642 :M
(0)S
42 654 :M
f3_12 sf
-.019(Include cbrt in the list of function names in item [)A
280 654 :M
-.334(11])A
297 654 :M
-.111( below.)A
483 645 1 12 rF
endp
%%Page: 7 7
%%BeginPageSetup
initializepage
(; page: 7 of 10)setjob
%%EndPageSetup
gS 0 0 552 730 rC
78 14 :M
f0_12 sf
-.093(Draft 1997-02-0)A
156 14 :M
(7)S
376 14 :M
-.164(WG14/N6)A
426 14 :M
-.055(57 X3J11/97-0)A
498 14 :M
(20)S
519 5 1 12 rF
78 722 :M
-.088(Enhancements)A
504 722 :M
(7)S
519 713 1 12 rF
78 50 :M
f2_12 sf
(10.)S
f0_12 sf
( )S
97 50 :M
( )S
101 50 :M
@.416 .042(The proposal to provide the foundational financial/growth functions \()J
f5_10 sf
@.112(compound)A
f0_12 sf
@.291 .029( and)J
519 41 1 12 rF
78 62 :M
f5_10 sf
@.427(annuity)A
f0_12 sf
1.439 .144(\) is being withdrawn)J
230 62 :M
2.576 .258(.  They don't seem to )J
355 62 :M
1.844 .184(amount to a sufficiently large)J
519 53 1 12 rF
78 74 :M
@.087 .009(contribution to this important application)J
277 74 :M
@.143 .014( area \(and I don't have the time to put together a)J
519 65 1 12 rF
78 86 :M
-.035(more comprehensive solution\))A
224 86 :M
(.)S
230 86 :M
f2_12 sf
( )S
519 77 1 12 rF
519 89 1 12 rF
54 98 :M
f0_12 sf
(5)S
78 122 :M
f2_12 sf
@.932 .093(11.  Enhancement:)J
178 122 :M
f0_12 sf
@.701 .07(  Reserve the )J
f5_10 sf
@.348(c)A
f0_12 sf
1.186 .119(-prefixed names of math functions that could have)J
78 134 :M
-.012(complex counterparts but don't in C9X.)A
78 158 :M
f2_12 sf
@.458(Rationale:)A
f0_12 sf
1.636 .164(  This enhancement reserves the names for future library directions, and)J
48 158 :M
(1)S
54 158 :M
(0)S
78 170 :M
@.53 .053(provides guidance for extensions.  A straw vote in Toronto, taken during the discussion)J
78 182 :M
-.012(of type-generic math functions, strongly favored reserving such names.)A
78 206 :M
f2_12 sf
-.132(Edits:)A
109 206 :M
f0_12 sf
-.096( )A
f3_12 sf
-.179(In 7.1)A
140 206 :M
-.013(8.4, append the paragraph:)A
519 197 1 12 rF
48 218 :M
f0_12 sf
(1)S
54 218 :M
(5)S
114 230 :M
-.017(The function names)A
114 254 :M
f5_10 sf
(exp2)S
114 265 :M
(expm1)S
114 276 :M
(log10)S
48 276 :M
f0_12 sf
(2)S
54 276 :M
(0)S
114 287 :M
f5_10 sf
(log1p)S
114 298 :M
(log2)S
114 309 :M
(erf)S
114 320 :M
(erfc)S
114 331 :M
(gamma)S
48 331 :M
f0_12 sf
(2)S
54 331 :M
(5)S
114 342 :M
f5_10 sf
(lgamma)S
78 365 :M
f0_12 sf
-.029(and the same names suffixed with )A
244 365 :M
f5_10 sf
-.27(f)A
f0_12 sf
-.24( or )A
266 365 :M
f5_10 sf
(l)S
f0_12 sf
-.014(, all prefixed with )A
f5_10 sf
(c)S
f0_12 sf
-.015(, are reserved for)A
78 377 :M
-.009(corresponding functions with complex arguments and return values.)A
48 389 :M
(3)S
54 389 :M
(0)S
78 413 :M
f2_12 sf
-.04(12.  Enhancement:)A
174 413 :M
f0_12 sf
-.044(  Change the prototypes)A
519 404 1 12 rF
519 416 1 12 rF
114 437 :M
f5_10 sf
(long rinttol\(long double\);)S
519 428 1 11 rF
114 448 :M
(long long rinttoll\(long double\);)S
519 439 1 11 rF
48 448 :M
f0_12 sf
(3)S
54 448 :M
(5)S
114 459 :M
f5_10 sf
(long roundtol\(long double\);)S
519 450 1 11 rF
114 470 :M
(long long roundtoll\(long double\);)S
519 461 1 11 rF
519 472 1 12 rF
78 493 :M
f0_12 sf
-.334(to)A
519 484 1 12 rF
519 496 1 12 rF
48 505 :M
(4)S
54 505 :M
(0)S
114 517 :M
f5_10 sf
(long lrint\(double\);)S
519 508 1 11 rF
114 528 :M
(long long llrint\(double\);)S
519 519 1 11 rF
114 539 :M
(long lround\(double\);)S
519 530 1 11 rF
114 550 :M
(long long llround\(double\);)S
519 541 1 11 rF
519 552 1 12 rF
48 561 :M
f0_12 sf
(4)S
54 561 :M
(5)S
78 573 :M
-.328(The)A
97 573 :M
-.053( existence of)A
158 573 :M
( )S
f5_10 sf
-.047(float)A
f0_12 sf
-.036( and )A
f5_10 sf
-.047(long\312double)A
f0_12 sf
-.042( versions)A
323 573 :M
-.018( for the new functions is implicit.)A
519 564 1 12 rF
519 576 1 12 rF
78 597 :M
f2_12 sf
@.151(Rationale:)A
f0_12 sf
@.081 .008(  )J
140 597 :M
@.802 .08(There are two changes here.  First, the parameter type changes to )J
471 597 :M
f5_10 sf
(double)S
f0_12 sf
(,)S
519 588 1 12 rF
78 609 :M
@.404 .04(matching the X/Open function )J
f5_10 sf
@.112(ilogb)A
f0_12 sf
@.339 .034(, which like)J
319 609 :M
@.459 .046( these functions returns an integer-type)J
519 600 1 12 rF
78 621 :M
-.131(result)A
105 621 :M
-.058(;  this makes the )A
186 621 :M
-.008(interface style more consistent.  )A
342 621 :M
-.082(Second, t)A
387 621 :M
-.013(he names change to make)A
519 612 1 12 rF
48 621 :M
(5)S
54 621 :M
(0)S
78 633 :M
@.177 .018(way for )J
f5_10 sf
@.075(f)A
f0_12 sf
@.116 .012( and )J
f5_10 sf
@.075(l)A
f0_12 sf
@.265 .027( suffixe)J
192 633 :M
@.399 .04(d versions of the functions, which become needed because of the)J
519 624 1 12 rF
78 645 :M
1.626 .163(first change: )J
147 645 :M
2.139 .214( else )J
178 645 :M
f5_10 sf
@.507(rinttoll)A
f0_12 sf
1.018 .102( could be )J
282 645 :M
1.066 .107(either the)J
330 645 :M
@.279 .028( )J
f5_10 sf
@.613(double)A
f0_12 sf
1.602 .16( version of the)J
450 645 :M
@.144 .014( )J
f5_10 sf
@.357(long\312long)A
519 636 1 12 rF
78 657 :M
f0_12 sf
-.043(function or the )A
152 657 :M
f5_10 sf
(long\312double)S
f0_12 sf
( version of the )S
291 657 :M
f5_10 sf
(long)S
f0_12 sf
( function.  Although this enhancement is)S
519 648 1 12 rF
78 669 :M
1.24 .124(independent of enhancement [)J
231 669 :M
-.993(6])A
241 669 :M
1.981 .198( above, )J
285 669 :M
1.506 .151(its rationale would be somewhat stronger)J
497 669 :M
2.227 .223( if)J
519 660 1 12 rF
78 681 :M
-.108(enhancement [)A
148 681 :M
-.993(6])A
158 681 :M
-.098( were accepted)A
229 681 :M
(.)S
519 672 1 12 rF
48 681 :M
(5)S
54 681 :M
(5)S
endp
%%Page: 8 8
%%BeginPageSetup
initializepage
(; page: 8 of 10)setjob
%%EndPageSetup
gS 0 0 552 730 rC
42 14 :M
f0_12 sf
-.164(WG14/N6)A
92 14 :M
-.055(57 X3J11/97-0)A
164 14 :M
(20)S
418 14 :M
-.199(1997-0)A
452 14 :M
-.497(2-0)A
468 14 :M
(7)S
483 5 1 12 rF
42 722 :M
(8)S
404 722 :M
-.088(Enhancements)A
483 713 1 12 rF
483 41 1 12 rF
42 62 :M
1.706 .171(For functions with a floating argument and an integer return type, the current )J
451 62 :M
-.333(C9X)A
483 53 1 12 rF
42 74 :M
1.391 .139(specification took the approach of declaring the parameter to be )J
375 74 :M
f5_10 sf
@.279(long\312double)A
f0_12 sf
@.515 .051(.  The)J
483 65 1 12 rF
42 86 :M
@.04 .004(rationale was to avoid unnecessary multiple ver)J
272 86 :M
@.076 .008(sions of the function in the interface)J
447 86 :M
-.131(.  The)A
483 77 1 12 rF
42 98 :M
@.039 .004(implementation need not actually promote a )J
258 98 :M
f5_10 sf
@.015(float)A
f0_12 sf
( or )S
f5_10 sf
@.015(double)A
f0_12 sf
@.039 .004( argument to )J
405 98 :M
f5_10 sf
(long\312double)S
f0_12 sf
(,)S
483 89 1 12 rF
18 98 :M
(5)S
42 110 :M
-.005(so any potential inefficiency could be avoided.)A
483 101 1 12 rF
483 113 1 12 rF
42 134 :M
1.127 .113(However, )J
95 134 :M
1.375 .138(with the current interface )J
229 134 :M
1.603 .16(a programmer is left to worry about the )J
441 134 :M
-.331(risk)A
459 134 :M
1.672 .167( of)J
483 125 1 12 rF
42 146 :M
-.123(incurring)A
86 146 :M
@.768 .077( a costly promotion to)J
197 146 :M
@.137 .014( )J
f5_10 sf
@.301(long\312double)A
f0_12 sf
@.497 .05(.  Also, )J
310 146 :M
@.633 .063(the proposed enhancement seems)J
483 137 1 12 rF
42 158 :M
@.212 .021(more consistent with the rest of the interface)J
259 158 :M
@.196 .02(, where all the other functions come in three)J
483 149 1 12 rF
12 158 :M
(1)S
18 158 :M
(0)S
42 170 :M
-.06(sizes;  a programmer might initially be surprised )A
276 170 :M
-.09(not to find )A
329 170 :M
f5_10 sf
-.059(float)A
f0_12 sf
-.046( and )A
f5_10 sf
-.059(double)A
f0_12 sf
-.053( versions)A
461 170 :M
(.)S
483 161 1 12 rF
483 173 1 12 rF
42 194 :M
f2_12 sf
-.132(Edits:)A
73 194 :M
f0_12 sf
@.952 .095(  )J
82 194 :M
f3_12 sf
@.675 .067(In 7.6.9.6, 7.6.9.7, 7.6.9.9, 7.6.9.10, )J
264 194 :M
@.522 .052(F.9.6.5, and )J
328 194 :M
@.524 .052(F.9.6.7, change the subclause)J
483 185 1 12 rF
42 206 :M
@.203 .02(titles, synopses prototypes, and all references to reflect the )J
331 206 :M
-.012(function name and parameter)A
483 197 1 12 rF
42 218 :M
-.064(type change)A
100 218 :M
(s)S
105 218 :M
-.019( indicated above.)A
483 209 1 12 rF
12 218 :M
f0_12 sf
(1)S
18 218 :M
(5)S
483 221 1 12 rF
42 242 :M
f3_12 sf
-.017(Globally find and replace the names as indicated above.)A
483 233 1 12 rF
483 245 1 12 rF
42 266 :M
-.03(In 7.6, paragraph [1], )A
152 266 :M
-.008(insert after the second sentence:)A
483 257 1 12 rF
483 269 1 12 rF
12 278 :M
f0_12 sf
(2)S
18 278 :M
(0)S
42 290 :M
@.006 .001(Some synopses specify a function which takes a )J
277 290 :M
f5_10 sf
@.013(double)A
f0_12 sf
@.042 .004( argument and returns an integer-)J
483 281 1 12 rF
42 302 :M
-.006(type value;  for each such function, there are functions with the same name but with )A
448 302 :M
f5_10 sf
-.074(f)A
f0_12 sf
-.084( and)A
483 293 1 12 rF
42 314 :M
f5_10 sf
-.141(l)A
f0_12 sf
-.128( suff)A
70 314 :M
-.021(ixes which are corresponding functions with )A
286 314 :M
f5_10 sf
-.044(float)A
f0_12 sf
-.034( and )A
f5_10 sf
-.044(long double)A
f0_12 sf
-.041( arguments.)A
483 305 1 12 rF
483 317 1 12 rF
483 329 1 12 rF
12 338 :M
(2)S
18 338 :M
(5)S
42 350 :M
f2_12 sf
2.043 .204(13.  Enhancement:)J
146 350 :M
f0_12 sf
2.539 .254(  Fix the complex division sample)J
333 350 :M
2.924 .292( to cover a)J
396 350 :M
2.722 .272( case that was)J
483 341 1 12 rF
42 362 :M
-.098(overlooked.)A
483 353 1 12 rF
483 365 1 12 rF
42 386 :M
f2_12 sf
@.4(Rationale:)A
f0_12 sf
1.089 .109(  The current version )J
211 386 :M
1.473 .147(does not handle the infinity/zero case correctly.  In)J
483 377 1 12 rF
42 398 :M
@.165 .016(particular, the first calculation of )J
205 398 :M
f5_10 sf
@.138(x)A
f0_12 sf
@.224 .022( and )J
234 398 :M
f5_10 sf
@.054(y)A
f0_12 sf
@.179 .018( yields)J
273 398 :M
@.053 .005( NaN+iNaN, then execution)J
409 398 :M
@.158 .016( goes into the)J
483 389 1 12 rF
12 398 :M
(3)S
18 398 :M
(0)S
42 410 :M
f5_10 sf
-.03(if \(\(isinf\(a\))A
f0_12 sf
-.015( ... )A
f5_10 sf
(\))S
f0_12 sf
-.029( block)A
171 410 :M
-.006(, but comes out again as NaN+iNaN, instead of an infinity.)A
483 401 1 12 rF
483 413 1 12 rF
42 434 :M
f2_12 sf
-.132(Edits:)A
73 434 :M
f0_12 sf
-.027(  Replace example [2] in G.5.1 with:)A
483 425 1 12 rF
483 437 1 12 rF
42 458 :M
f5_10 sf
(#include <math.h>)S
483 449 1 11 rF
12 458 :M
f0_12 sf
(3)S
18 458 :M
(5)S
42 469 :M
f5_10 sf
(#include <complex.h>)S
483 460 1 11 rF
42 480 :M
(/* isinf is as in example 1 above */)S
483 471 1 11 rF
483 482 1 11 rF
42 502 :M
(/* Divide z / w ... */)S
483 493 1 11 rF
42 513 :M
(double complex _Cdivd\(double complex z, double complex w\))S
483 504 1 11 rF
12 513 :M
f0_12 sf
(4)S
18 513 :M
(0)S
42 524 :M
f5_10 sf
({)S
483 515 1 11 rF
78 535 :M
(FP_CONTRACT_OFF)S
483 526 1 11 rF
78 546 :M
(double a, b, c, d, logbw, denom, x, y;)S
483 537 1 11 rF
78 557 :M
(long llogbw = 0;)S
483 548 1 11 rF
78 568 :M
(a = creal\(z\); b = cimag\(z\);)S
483 559 1 11 rF
12 568 :M
f0_12 sf
(4)S
18 568 :M
(5)S
78 579 :M
f5_10 sf
(c = creal\(w\); d = cimag\(w\);)S
483 570 1 11 rF
78 590 :M
(logbw = logb\(fmax\(fabs\(c\), fabs\(d\)\)\);)S
483 581 1 11 rF
78 601 :M
(if \(isfinite\(logbw\)\) {)S
483 592 1 11 rF
96 612 :M
(llogbw = \(long\)logbw;)S
483 603 1 11 rF
96 623 :M
(c = scalb\(c, -llogbw\);)S
483 614 1 11 rF
12 623 :M
f0_12 sf
(5)S
18 623 :M
(0)S
96 634 :M
f5_10 sf
(d = scalb\(d, -llogbw\);)S
483 625 1 11 rF
78 645 :M
(})S
483 636 1 11 rF
78 656 :M
(denom = c * c + d * d;)S
483 647 1 11 rF
78 667 :M
(x = scalb\(\(a * c + b * d\) / denom, -llogbw\);)S
483 658 1 11 rF
78 678 :M
(y = scalb\(\(b * c - a * d\) / denom, -llogbw\);)S
483 669 1 11 rF
12 678 :M
f0_12 sf
(5)S
18 678 :M
(5)S
endp
%%Page: 9 9
%%BeginPageSetup
initializepage
(; page: 9 of 10)setjob
%%EndPageSetup
gS 0 0 552 730 rC
78 14 :M
f0_12 sf
-.093(Draft 1997-02-0)A
156 14 :M
(7)S
376 14 :M
-.164(WG14/N6)A
426 14 :M
-.055(57 X3J11/97-0)A
498 14 :M
(20)S
519 5 1 12 rF
78 722 :M
-.088(Enhancements)A
504 722 :M
(9)S
519 713 1 12 rF
114 50 :M
f5_10 sf
(/*)S
519 41 1 11 rF
114 61 :M
( * Recover infinities and zeros that computed as NaN+iNaN;)S
519 52 1 11 rF
114 72 :M
( * the only cases are non-zero/zero, infinite/finite, and)S
519 63 1 11 rF
78 83 :M
( )S
114 83 :M
( * finite/infinite, ...)S
519 74 1 11 rF
114 94 :M
( */)S
519 85 1 11 rF
54 94 :M
f0_12 sf
(5)S
114 105 :M
f5_10 sf
(if\312\(isnan\(x\)\312&&\312isnan\(y\)\) {)S
519 96 1 11 rF
132 116 :M
(if \(\(denom == 0.0\) && \(!isnan\(a\) || !isnan\(b\)\)\) {)S
519 107 1 11 rF
150 127 :M
(x = copysign\(INFINITY, c\) * a;)S
519 118 1 11 rF
150 138 :M
(y = copysign\(INFINITY, c\) * b;)S
519 129 1 11 rF
132 149 :M
(})S
519 140 1 11 rF
48 149 :M
f0_12 sf
(1)S
54 149 :M
(0)S
132 160 :M
f5_10 sf
(else if \(\(isinf\(a\) || isinf\(b\)\) && isfinite\(c\) && isfinite\(d\)\) {)S
519 151 1 11 rF
150 171 :M
(a = copysign\(isinf\(a\) ? 1.0 : 0.0, a\);)S
519 162 1 11 rF
150 182 :M
(b = copysign\(isinf\(b\) ? 1.0 : 0.0, b\);)S
519 173 1 11 rF
150 193 :M
(x = INFINITY * \(a * c + b * d\);)S
519 184 1 11 rF
150 204 :M
(y = INFINITY * \(b * c - a * d\);)S
519 195 1 11 rF
48 204 :M
f0_12 sf
(1)S
54 204 :M
(5)S
132 215 :M
f5_10 sf
(})S
519 206 1 11 rF
132 226 :M
(else if \(isinf\(logbw\) && isfinite\(a\) && isfinite\(b\)\) {)S
519 217 1 11 rF
150 237 :M
(c = copysign\(isinf\(c\) ? 1.0 : 0.0, c\);)S
519 228 1 11 rF
150 248 :M
(d = copysign\(isinf\(d\) ? 1.0 : 0.0, d\);)S
519 239 1 11 rF
150 259 :M
(x = 0.0 * \(a * c + b * d\);)S
519 250 1 11 rF
48 259 :M
f0_12 sf
(2)S
54 259 :M
(0)S
150 270 :M
f5_10 sf
(y = 0.0 * \(b * c - a * d\);)S
519 261 1 11 rF
132 281 :M
(})S
519 272 1 11 rF
114 292 :M
(})S
519 283 1 11 rF
114 303 :M
(return x + I * y;)S
519 294 1 11 rF
78 314 :M
f0_12 sf
(})S
519 305 1 12 rF
48 314 :M
(2)S
54 314 :M
(5)S
519 317 1 12 rF
519 329 1 12 rF
78 350 :M
f2_12 sf
1.107 .111(14.  Enhancement:)J
f0_12 sf
@.122 .012(  )J
185 350 :M
@.778 .078(Change the special cases for )J
331 350 :M
f5_10 sf
@.27(cexp)A
f0_12 sf
@.737 .074( to be more consistent with the)J
519 341 1 12 rF
78 362 :M
-.131(other )A
106 362 :M
-.061(complex functions)A
195 362 :M
(.)S
519 353 1 12 rF
519 365 1 12 rF
48 374 :M
(3)S
54 374 :M
(0)S
78 386 :M
f2_12 sf
@.062(Rationale:)A
f0_12 sf
@.033 .003(  )J
139 386 :M
@.32 .032(Some of these)J
209 386 :M
@.562 .056( changes give the implementation latitude with respect to the)J
519 377 1 12 rF
78 398 :M
@.96 .096(sign of infinity or zero where the sign isn't meaningfully determined by the argument,)J
519 389 1 12 rF
78 410 :M
@.148 .015(which is the approach for the other complex functions.  The other changes reflect the fact)J
519 401 1 12 rF
78 422 :M
@.718 .072(that )J
101 422 :M
f5_10 sf
@.334(cexp)A
f0_12 sf
@.847 .085( maps the real axis to the real axis;  these also follow the approach for other)J
519 413 1 12 rF
78 434 :M
-.065(functions \(e.g. )A
150 434 :M
f5_10 sf
-.16(csinh)A
f0_12 sf
-.186(\).)A
519 425 1 12 rF
48 434 :M
(3)S
54 434 :M
(5)S
519 437 1 12 rF
78 458 :M
f2_12 sf
-.132(Edits:)A
109 458 :M
f0_12 sf
-.034(  )A
f3_12 sf
-.059(In G.5.10, )A
167 458 :M
-.993(re)A
177 458 :M
-.041(place these five bullets)A
286 458 :M
(:)S
519 449 1 12 rF
519 461 1 12 rF
78 482 :M
f0_12 sf
(\245)S
96 482 :M
f5_10 sf
-.016(cexp)A
f0_12 sf
-.014(\(-)A
cF f1_12 sf
-.014(\245)A
sf
-.014(+i)A
cF f1_12 sf
-.014(\245)A
sf
-.014(\) returns +0+i0.)A
519 473 1 12 rF
78 494 :M
(\245)S
96 494 :M
f5_10 sf
(cexp)S
f0_12 sf
-.01(\(+)A
cF f1_12 sf
-.01(\245)A
sf
-.01(+i)A
cF f1_12 sf
-.01(\245)A
sf
-.01(\) returns +)A
cF f1_12 sf
-.01(\245)A
sf
-.01(+iNaN and raises the invalid exception.)A
519 485 1 12 rF
48 494 :M
(4)S
54 494 :M
(0)S
519 497 1 12 rF
78 518 :M
f3_12 sf
(...)S
519 509 1 12 rF
519 521 1 12 rF
78 542 :M
f0_12 sf
(\245)S
96 542 :M
f5_10 sf
@.187(cexp)A
f0_12 sf
@.539 .054( \(-)J
cF f1_12 sf
@.054(\245)A
sf
@.539 .054(+iNaN\) returns +0)J
cF f1_12 sf
@.054(\261)A
sf
@.539 .054(i0 \(where the sign of the imaginary part of the result is)J
519 533 1 12 rF
96 554 :M
-.025(unspecified\).)A
519 545 1 12 rF
48 554 :M
(4)S
54 554 :M
(5)S
78 566 :M
(\245)S
96 566 :M
f5_10 sf
-.015(cexp)A
f0_12 sf
-.015( \(+)A
cF f1_12 sf
-.015(\245)A
sf
-.015(+iNaN\) returns +)A
cF f1_12 sf
-.015(\245)A
sf
-.015(+iNaN.)A
519 557 1 12 rF
78 578 :M
(\245)S
96 578 :M
f5_10 sf
@.068(cexp)A
f0_12 sf
@.232 .023( \(NaN+iy\) returns NaN+iNaN and optionally raises the invalid exception, for all)J
519 569 1 12 rF
96 590 :M
-.036(numbers y.)A
519 581 1 12 rF
519 593 1 12 rF
78 614 :M
f3_12 sf
-.031(with these six bullets)A
178 614 :M
(:)S
519 605 1 12 rF
48 614 :M
f0_12 sf
(5)S
54 614 :M
(0)S
519 617 1 12 rF
78 638 :M
(\245)S
96 638 :M
f5_10 sf
@.317(cexp)A
f0_12 sf
@.947 .095(\(-)J
cF f1_12 sf
@.095(\245)A
sf
@.947 .095(+i)J
cF f1_12 sf
@.095(\245)A
sf
@.947 .095(\) returns )J
cF f1_12 sf
@.095(\261)A
sf
@.947 .095(0)J
cF f1_12 sf
@.095(\261)A
sf
@.947 .095(i0 \(where the signs of the real and imaginary parts of the)J
519 629 1 12 rF
96 650 :M
-.026(result are unspecified\).)A
519 641 1 12 rF
78 662 :M
(\245)S
96 662 :M
f5_10 sf
@.178(cexp)A
f0_12 sf
@.606 .061(\(+)J
cF f1_12 sf
@.061(\245)A
sf
@.606 .061(+i)J
cF f1_12 sf
@.061(\245)A
sf
@.606 .061(\) returns )J
cF f1_12 sf
@.061(\261\245)A
sf
@.606 .061(+iNaN and raises the invalid exception \(where the signs of)J
519 653 1 12 rF
96 674 :M
-.003(the real and imaginary parts of the result are unspecified\).)A
519 665 1 12 rF
48 674 :M
(5)S
54 674 :M
(5)S
519 677 1 12 rF
endp
%%Page: 10 10
%%BeginPageSetup
initializepage
(; page: 10 of 10)setjob
%%EndPageSetup
gS 0 0 552 730 rC
42 14 :M
f0_12 sf
-.164(WG14/N6)A
92 14 :M
-.055(57 X3J11/97-0)A
164 14 :M
(20)S
418 14 :M
-.199(1997-0)A
452 14 :M
-.497(2-0)A
468 14 :M
(7)S
483 5 1 12 rF
42 722 :M
(10)S
404 722 :M
-.088(Enhancements)A
483 713 1 12 rF
42 50 :M
f3_12 sf
(...)S
483 41 1 12 rF
483 53 1 12 rF
42 74 :M
f0_12 sf
(\245)S
60 74 :M
f5_10 sf
@.054(cexp)A
f0_12 sf
@.159 .016( \(-)J
cF f1_12 sf
@.016(\245)A
sf
@.159 .016(+iNaN\) returns )J
cF f1_12 sf
@.016(\261)A
sf
@.159 .016(0)J
cF f1_12 sf
@.016(\261)A
sf
@.159 .016(i0 \(where the signs of the real and imaginary parts of the)J
483 65 1 12 rF
60 86 :M
-.026(result are unspecified\).)A
483 77 1 12 rF
42 98 :M
(\245)S
60 98 :M
f5_10 sf
@.264(cexp)A
f0_12 sf
@.845 .084( \(+)J
cF f1_12 sf
@.084(\245)A
sf
@.845 .084(+iNaN\) returns )J
cF f1_12 sf
@.084(\261\245)A
sf
@.845 .084(+iNaN \(where the sign of the real)J
373 98 :M
@.991 .099( part of the result is)J
483 89 1 12 rF
18 98 :M
(5)S
60 110 :M
-.025(unspecified\).)A
483 101 1 12 rF
42 122 :M
(\245)S
60 122 :M
f5_10 sf
-.031(cexp)A
f0_12 sf
-.028( \(NaN+i0\) returns NaN+i0.)A
483 113 1 12 rF
42 134 :M
(\245)S
60 134 :M
f5_10 sf
@.068(cexp)A
f0_12 sf
@.232 .023( \(NaN+iy\) returns NaN+iNaN and optionally raises the invalid exception, for all)J
483 125 1 12 rF
60 146 :M
-.057(nonzero numbers y.)A
483 137 1 12 rF
483 149 1 12 rF
12 158 :M
(1)S
18 158 :M
(0)S
endp
%%Trailer
end		% md
%%EOF
@EOF

chmod 640 enhancements.ps

exit 0

--------------67CD63B7977--

