numeric.out 71 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003100410051006100710081009101010111012101310141015101610171018101910201021102210231024102510261027102810291030103110321033103410351036103710381039104010411042104310441045104610471048104910501051105210531054105510561057105810591060106110621063106410651066106710681069107010711072107310741075107610771078107910801081108210831084108510861087108810891090109110921093109410951096109710981099110011011102110311041105110611071108110911101111111211131114111511161117111811191120112111221123112411251126112711281129113011311132113311341135113611371138113911401141114211431144114511461147114811491150115111521153115411551156115711581159116011611162116311641165116611671168116911701171117211731174117511761177117811791180118111821183118411851186118711881189119011911192119311941195119611971198119912001201120212031204120512061207120812091210121112121213121412151216121712181219122012211222122312241225122612271228122912301231123212331234123512361237123812391240124112421243124412451246124712481249125012511252125312541255125612571258125912601261126212631264126512661267126812691270127112721273127412751276127712781279128012811282128312841285128612871288128912901291129212931294129512961297129812991300130113021303130413051306130713081309131013111312131313141315131613171318131913201321132213231324132513261327132813291330133113321333133413351336133713381339134013411342134313441345134613471348134913501351135213531354135513561357135813591360136113621363136413651366136713681369137013711372137313741375137613771378137913801381138213831384138513861387138813891390139113921393139413951396139713981399140014011402140314041405140614071408140914101411141214131414141514161417141814191420142114221423142414251426142714281429143014311432143314341435143614371438143914401441144214431444144514461447144814491450145114521453145414551456145714581459146014611462146314641465146614671468146914701471147214731474147514761477147814791480148114821483148414851486148714881489149014911492149314941495149614971498149915001501150215031504150515061507150815091510151115121513151415151516151715181519152015211522152315241525152615271528152915301531153215331534153515361537153815391540154115421543154415451546154715481549155015511552155315541555155615571558155915601561156215631564156515661567156815691570157115721573157415751576157715781579158015811582158315841585158615871588158915901591159215931594159515961597159815991600160116021603160416051606160716081609161016111612161316141615161616171618161916201621162216231624162516261627162816291630163116321633163416351636163716381639164016411642164316441645164616471648164916501651165216531654165516561657165816591660166116621663166416651666166716681669167016711672167316741675167616771678167916801681168216831684168516861687168816891690169116921693169416951696169716981699170017011702170317041705170617071708170917101711171217131714171517161717171817191720172117221723172417251726172717281729173017311732173317341735173617371738173917401741174217431744174517461747174817491750175117521753175417551756175717581759176017611762176317641765176617671768176917701771177217731774177517761777177817791780178117821783178417851786178717881789179017911792179317941795179617971798179918001801180218031804180518061807180818091810181118121813181418151816181718181819182018211822182318241825182618271828182918301831183218331834183518361837183818391840184118421843184418451846184718481849185018511852185318541855185618571858185918601861186218631864186518661867186818691870187118721873187418751876187718781879188018811882188318841885188618871888188918901891189218931894189518961897189818991900190119021903190419051906190719081909191019111912191319141915191619171918191919201921192219231924192519261927192819291930193119321933193419351936193719381939194019411942194319441945194619471948194919501951195219531954195519561957195819591960196119621963196419651966196719681969197019711972197319741975197619771978197919801981198219831984198519861987198819891990199119921993199419951996199719981999200020012002200320042005200620072008200920102011201220132014201520162017201820192020202120222023202420252026202720282029203020312032203320342035203620372038203920402041204220432044204520462047204820492050205120522053205420552056205720582059206020612062206320642065206620672068206920702071207220732074207520762077207820792080208120822083208420852086208720882089209020912092209320942095209620972098209921002101210221032104210521062107210821092110211121122113211421152116211721182119212021212122212321242125212621272128212921302131213221332134213521362137213821392140214121422143214421452146214721482149215021512152215321542155215621572158215921602161216221632164216521662167216821692170217121722173217421752176217721782179218021812182218321842185218621872188218921902191219221932194219521962197219821992200220122022203220422052206220722082209221022112212221322142215221622172218221922202221222222232224222522262227222822292230223122322233223422352236223722382239224022412242224322442245224622472248224922502251225222532254225522562257225822592260226122622263226422652266226722682269227022712272227322742275227622772278227922802281228222832284228522862287228822892290229122922293229422952296229722982299230023012302230323042305230623072308230923102311231223132314231523162317231823192320232123222323232423252326232723282329233023312332233323342335233623372338233923402341234223432344234523462347234823492350235123522353235423552356235723582359236023612362236323642365236623672368236923702371237223732374237523762377237823792380238123822383
  1. --
  2. -- NUMERIC
  3. --
  4. CREATE TABLE num_data (id int4, val numeric(210,10));
  5. CREATE TABLE num_exp_add (id1 int4, id2 int4, expected numeric(210,10));
  6. CREATE TABLE num_exp_sub (id1 int4, id2 int4, expected numeric(210,10));
  7. CREATE TABLE num_exp_div (id1 int4, id2 int4, expected numeric(210,10));
  8. CREATE TABLE num_exp_mul (id1 int4, id2 int4, expected numeric(210,10));
  9. CREATE TABLE num_exp_sqrt (id int4, expected numeric(210,10));
  10. CREATE TABLE num_exp_ln (id int4, expected numeric(210,10));
  11. CREATE TABLE num_exp_log10 (id int4, expected numeric(210,10));
  12. CREATE TABLE num_exp_power_10_ln (id int4, expected numeric(210,10));
  13. CREATE TABLE num_result (id1 int4, id2 int4, result numeric(210,10));
  14. -- ******************************
  15. -- * The following EXPECTED results are computed by bc(1)
  16. -- * with a scale of 200
  17. -- ******************************
  18. BEGIN TRANSACTION;
  19. INSERT INTO num_exp_add VALUES (0,0,'0');
  20. INSERT INTO num_exp_sub VALUES (0,0,'0');
  21. INSERT INTO num_exp_mul VALUES (0,0,'0');
  22. INSERT INTO num_exp_div VALUES (0,0,'NaN');
  23. INSERT INTO num_exp_add VALUES (0,1,'0');
  24. INSERT INTO num_exp_sub VALUES (0,1,'0');
  25. INSERT INTO num_exp_mul VALUES (0,1,'0');
  26. INSERT INTO num_exp_div VALUES (0,1,'NaN');
  27. INSERT INTO num_exp_add VALUES (0,2,'-34338492.215397047');
  28. INSERT INTO num_exp_sub VALUES (0,2,'34338492.215397047');
  29. INSERT INTO num_exp_mul VALUES (0,2,'0');
  30. INSERT INTO num_exp_div VALUES (0,2,'0');
  31. INSERT INTO num_exp_add VALUES (0,3,'4.31');
  32. INSERT INTO num_exp_sub VALUES (0,3,'-4.31');
  33. INSERT INTO num_exp_mul VALUES (0,3,'0');
  34. INSERT INTO num_exp_div VALUES (0,3,'0');
  35. INSERT INTO num_exp_add VALUES (0,4,'7799461.4119');
  36. INSERT INTO num_exp_sub VALUES (0,4,'-7799461.4119');
  37. INSERT INTO num_exp_mul VALUES (0,4,'0');
  38. INSERT INTO num_exp_div VALUES (0,4,'0');
  39. INSERT INTO num_exp_add VALUES (0,5,'16397.038491');
  40. INSERT INTO num_exp_sub VALUES (0,5,'-16397.038491');
  41. INSERT INTO num_exp_mul VALUES (0,5,'0');
  42. INSERT INTO num_exp_div VALUES (0,5,'0');
  43. INSERT INTO num_exp_add VALUES (0,6,'93901.57763026');
  44. INSERT INTO num_exp_sub VALUES (0,6,'-93901.57763026');
  45. INSERT INTO num_exp_mul VALUES (0,6,'0');
  46. INSERT INTO num_exp_div VALUES (0,6,'0');
  47. INSERT INTO num_exp_add VALUES (0,7,'-83028485');
  48. INSERT INTO num_exp_sub VALUES (0,7,'83028485');
  49. INSERT INTO num_exp_mul VALUES (0,7,'0');
  50. INSERT INTO num_exp_div VALUES (0,7,'0');
  51. INSERT INTO num_exp_add VALUES (0,8,'74881');
  52. INSERT INTO num_exp_sub VALUES (0,8,'-74881');
  53. INSERT INTO num_exp_mul VALUES (0,8,'0');
  54. INSERT INTO num_exp_div VALUES (0,8,'0');
  55. INSERT INTO num_exp_add VALUES (0,9,'-24926804.045047420');
  56. INSERT INTO num_exp_sub VALUES (0,9,'24926804.045047420');
  57. INSERT INTO num_exp_mul VALUES (0,9,'0');
  58. INSERT INTO num_exp_div VALUES (0,9,'0');
  59. INSERT INTO num_exp_add VALUES (1,0,'0');
  60. INSERT INTO num_exp_sub VALUES (1,0,'0');
  61. INSERT INTO num_exp_mul VALUES (1,0,'0');
  62. INSERT INTO num_exp_div VALUES (1,0,'NaN');
  63. INSERT INTO num_exp_add VALUES (1,1,'0');
  64. INSERT INTO num_exp_sub VALUES (1,1,'0');
  65. INSERT INTO num_exp_mul VALUES (1,1,'0');
  66. INSERT INTO num_exp_div VALUES (1,1,'NaN');
  67. INSERT INTO num_exp_add VALUES (1,2,'-34338492.215397047');
  68. INSERT INTO num_exp_sub VALUES (1,2,'34338492.215397047');
  69. INSERT INTO num_exp_mul VALUES (1,2,'0');
  70. INSERT INTO num_exp_div VALUES (1,2,'0');
  71. INSERT INTO num_exp_add VALUES (1,3,'4.31');
  72. INSERT INTO num_exp_sub VALUES (1,3,'-4.31');
  73. INSERT INTO num_exp_mul VALUES (1,3,'0');
  74. INSERT INTO num_exp_div VALUES (1,3,'0');
  75. INSERT INTO num_exp_add VALUES (1,4,'7799461.4119');
  76. INSERT INTO num_exp_sub VALUES (1,4,'-7799461.4119');
  77. INSERT INTO num_exp_mul VALUES (1,4,'0');
  78. INSERT INTO num_exp_div VALUES (1,4,'0');
  79. INSERT INTO num_exp_add VALUES (1,5,'16397.038491');
  80. INSERT INTO num_exp_sub VALUES (1,5,'-16397.038491');
  81. INSERT INTO num_exp_mul VALUES (1,5,'0');
  82. INSERT INTO num_exp_div VALUES (1,5,'0');
  83. INSERT INTO num_exp_add VALUES (1,6,'93901.57763026');
  84. INSERT INTO num_exp_sub VALUES (1,6,'-93901.57763026');
  85. INSERT INTO num_exp_mul VALUES (1,6,'0');
  86. INSERT INTO num_exp_div VALUES (1,6,'0');
  87. INSERT INTO num_exp_add VALUES (1,7,'-83028485');
  88. INSERT INTO num_exp_sub VALUES (1,7,'83028485');
  89. INSERT INTO num_exp_mul VALUES (1,7,'0');
  90. INSERT INTO num_exp_div VALUES (1,7,'0');
  91. INSERT INTO num_exp_add VALUES (1,8,'74881');
  92. INSERT INTO num_exp_sub VALUES (1,8,'-74881');
  93. INSERT INTO num_exp_mul VALUES (1,8,'0');
  94. INSERT INTO num_exp_div VALUES (1,8,'0');
  95. INSERT INTO num_exp_add VALUES (1,9,'-24926804.045047420');
  96. INSERT INTO num_exp_sub VALUES (1,9,'24926804.045047420');
  97. INSERT INTO num_exp_mul VALUES (1,9,'0');
  98. INSERT INTO num_exp_div VALUES (1,9,'0');
  99. INSERT INTO num_exp_add VALUES (2,0,'-34338492.215397047');
  100. INSERT INTO num_exp_sub VALUES (2,0,'-34338492.215397047');
  101. INSERT INTO num_exp_mul VALUES (2,0,'0');
  102. INSERT INTO num_exp_div VALUES (2,0,'NaN');
  103. INSERT INTO num_exp_add VALUES (2,1,'-34338492.215397047');
  104. INSERT INTO num_exp_sub VALUES (2,1,'-34338492.215397047');
  105. INSERT INTO num_exp_mul VALUES (2,1,'0');
  106. INSERT INTO num_exp_div VALUES (2,1,'NaN');
  107. INSERT INTO num_exp_add VALUES (2,2,'-68676984.430794094');
  108. INSERT INTO num_exp_sub VALUES (2,2,'0');
  109. INSERT INTO num_exp_mul VALUES (2,2,'1179132047626883.596862135856320209');
  110. INSERT INTO num_exp_div VALUES (2,2,'1.00000000000000000000');
  111. INSERT INTO num_exp_add VALUES (2,3,'-34338487.905397047');
  112. INSERT INTO num_exp_sub VALUES (2,3,'-34338496.525397047');
  113. INSERT INTO num_exp_mul VALUES (2,3,'-147998901.44836127257');
  114. INSERT INTO num_exp_div VALUES (2,3,'-7967167.56737750510440835266');
  115. INSERT INTO num_exp_add VALUES (2,4,'-26539030.803497047');
  116. INSERT INTO num_exp_sub VALUES (2,4,'-42137953.627297047');
  117. INSERT INTO num_exp_mul VALUES (2,4,'-267821744976817.8111137106593');
  118. INSERT INTO num_exp_div VALUES (2,4,'-4.40267480046830116685');
  119. INSERT INTO num_exp_add VALUES (2,5,'-34322095.176906047');
  120. INSERT INTO num_exp_sub VALUES (2,5,'-34354889.253888047');
  121. INSERT INTO num_exp_mul VALUES (2,5,'-563049578578.769242506736077');
  122. INSERT INTO num_exp_div VALUES (2,5,'-2094.18866914563535496429');
  123. INSERT INTO num_exp_add VALUES (2,6,'-34244590.637766787');
  124. INSERT INTO num_exp_sub VALUES (2,6,'-34432393.793027307');
  125. INSERT INTO num_exp_mul VALUES (2,6,'-3224438592470.18449811926184222');
  126. INSERT INTO num_exp_div VALUES (2,6,'-365.68599891479766440940');
  127. INSERT INTO num_exp_add VALUES (2,7,'-117366977.215397047');
  128. INSERT INTO num_exp_sub VALUES (2,7,'48689992.784602953');
  129. INSERT INTO num_exp_mul VALUES (2,7,'2851072985828710.485883795');
  130. INSERT INTO num_exp_div VALUES (2,7,'.41357483778485235518');
  131. INSERT INTO num_exp_add VALUES (2,8,'-34263611.215397047');
  132. INSERT INTO num_exp_sub VALUES (2,8,'-34413373.215397047');
  133. INSERT INTO num_exp_mul VALUES (2,8,'-2571300635581.146276407');
  134. INSERT INTO num_exp_div VALUES (2,8,'-458.57416721727870888476');
  135. INSERT INTO num_exp_add VALUES (2,9,'-59265296.260444467');
  136. INSERT INTO num_exp_sub VALUES (2,9,'-9411688.170349627');
  137. INSERT INTO num_exp_mul VALUES (2,9,'855948866655588.453741509242968740');
  138. INSERT INTO num_exp_div VALUES (2,9,'1.37757299946438931811');
  139. INSERT INTO num_exp_add VALUES (3,0,'4.31');
  140. INSERT INTO num_exp_sub VALUES (3,0,'4.31');
  141. INSERT INTO num_exp_mul VALUES (3,0,'0');
  142. INSERT INTO num_exp_div VALUES (3,0,'NaN');
  143. INSERT INTO num_exp_add VALUES (3,1,'4.31');
  144. INSERT INTO num_exp_sub VALUES (3,1,'4.31');
  145. INSERT INTO num_exp_mul VALUES (3,1,'0');
  146. INSERT INTO num_exp_div VALUES (3,1,'NaN');
  147. INSERT INTO num_exp_add VALUES (3,2,'-34338487.905397047');
  148. INSERT INTO num_exp_sub VALUES (3,2,'34338496.525397047');
  149. INSERT INTO num_exp_mul VALUES (3,2,'-147998901.44836127257');
  150. INSERT INTO num_exp_div VALUES (3,2,'-.00000012551512084352');
  151. INSERT INTO num_exp_add VALUES (3,3,'8.62');
  152. INSERT INTO num_exp_sub VALUES (3,3,'0');
  153. INSERT INTO num_exp_mul VALUES (3,3,'18.5761');
  154. INSERT INTO num_exp_div VALUES (3,3,'1.00000000000000000000');
  155. INSERT INTO num_exp_add VALUES (3,4,'7799465.7219');
  156. INSERT INTO num_exp_sub VALUES (3,4,'-7799457.1019');
  157. INSERT INTO num_exp_mul VALUES (3,4,'33615678.685289');
  158. INSERT INTO num_exp_div VALUES (3,4,'.00000055260225961552');
  159. INSERT INTO num_exp_add VALUES (3,5,'16401.348491');
  160. INSERT INTO num_exp_sub VALUES (3,5,'-16392.728491');
  161. INSERT INTO num_exp_mul VALUES (3,5,'70671.23589621');
  162. INSERT INTO num_exp_div VALUES (3,5,'.00026285234387695504');
  163. INSERT INTO num_exp_add VALUES (3,6,'93905.88763026');
  164. INSERT INTO num_exp_sub VALUES (3,6,'-93897.26763026');
  165. INSERT INTO num_exp_mul VALUES (3,6,'404715.7995864206');
  166. INSERT INTO num_exp_div VALUES (3,6,'.00004589912234457595');
  167. INSERT INTO num_exp_add VALUES (3,7,'-83028480.69');
  168. INSERT INTO num_exp_sub VALUES (3,7,'83028489.31');
  169. INSERT INTO num_exp_mul VALUES (3,7,'-357852770.35');
  170. INSERT INTO num_exp_div VALUES (3,7,'-.00000005190989574240');
  171. INSERT INTO num_exp_add VALUES (3,8,'74885.31');
  172. INSERT INTO num_exp_sub VALUES (3,8,'-74876.69');
  173. INSERT INTO num_exp_mul VALUES (3,8,'322737.11');
  174. INSERT INTO num_exp_div VALUES (3,8,'.00005755799201399553');
  175. INSERT INTO num_exp_add VALUES (3,9,'-24926799.735047420');
  176. INSERT INTO num_exp_sub VALUES (3,9,'24926808.355047420');
  177. INSERT INTO num_exp_mul VALUES (3,9,'-107434525.43415438020');
  178. INSERT INTO num_exp_div VALUES (3,9,'-.00000017290624149854');
  179. INSERT INTO num_exp_add VALUES (4,0,'7799461.4119');
  180. INSERT INTO num_exp_sub VALUES (4,0,'7799461.4119');
  181. INSERT INTO num_exp_mul VALUES (4,0,'0');
  182. INSERT INTO num_exp_div VALUES (4,0,'NaN');
  183. INSERT INTO num_exp_add VALUES (4,1,'7799461.4119');
  184. INSERT INTO num_exp_sub VALUES (4,1,'7799461.4119');
  185. INSERT INTO num_exp_mul VALUES (4,1,'0');
  186. INSERT INTO num_exp_div VALUES (4,1,'NaN');
  187. INSERT INTO num_exp_add VALUES (4,2,'-26539030.803497047');
  188. INSERT INTO num_exp_sub VALUES (4,2,'42137953.627297047');
  189. INSERT INTO num_exp_mul VALUES (4,2,'-267821744976817.8111137106593');
  190. INSERT INTO num_exp_div VALUES (4,2,'-.22713465002993920385');
  191. INSERT INTO num_exp_add VALUES (4,3,'7799465.7219');
  192. INSERT INTO num_exp_sub VALUES (4,3,'7799457.1019');
  193. INSERT INTO num_exp_mul VALUES (4,3,'33615678.685289');
  194. INSERT INTO num_exp_div VALUES (4,3,'1809619.81714617169373549883');
  195. INSERT INTO num_exp_add VALUES (4,4,'15598922.8238');
  196. INSERT INTO num_exp_sub VALUES (4,4,'0');
  197. INSERT INTO num_exp_mul VALUES (4,4,'60831598315717.14146161');
  198. INSERT INTO num_exp_div VALUES (4,4,'1.00000000000000000000');
  199. INSERT INTO num_exp_add VALUES (4,5,'7815858.450391');
  200. INSERT INTO num_exp_sub VALUES (4,5,'7783064.373409');
  201. INSERT INTO num_exp_mul VALUES (4,5,'127888068979.9935054429');
  202. INSERT INTO num_exp_div VALUES (4,5,'475.66281046305802686061');
  203. INSERT INTO num_exp_add VALUES (4,6,'7893362.98953026');
  204. INSERT INTO num_exp_sub VALUES (4,6,'7705559.83426974');
  205. INSERT INTO num_exp_mul VALUES (4,6,'732381731243.745115764094');
  206. INSERT INTO num_exp_div VALUES (4,6,'83.05996138436129499606');
  207. INSERT INTO num_exp_add VALUES (4,7,'-75229023.5881');
  208. INSERT INTO num_exp_sub VALUES (4,7,'90827946.4119');
  209. INSERT INTO num_exp_mul VALUES (4,7,'-647577464846017.9715');
  210. INSERT INTO num_exp_div VALUES (4,7,'-.09393717604145131637');
  211. INSERT INTO num_exp_add VALUES (4,8,'7874342.4119');
  212. INSERT INTO num_exp_sub VALUES (4,8,'7724580.4119');
  213. INSERT INTO num_exp_mul VALUES (4,8,'584031469984.4839');
  214. INSERT INTO num_exp_div VALUES (4,8,'104.15808298366741897143');
  215. INSERT INTO num_exp_add VALUES (4,9,'-17127342.633147420');
  216. INSERT INTO num_exp_sub VALUES (4,9,'32726265.456947420');
  217. INSERT INTO num_exp_mul VALUES (4,9,'-194415646271340.1815956522980');
  218. INSERT INTO num_exp_div VALUES (4,9,'-.31289456112403769409');
  219. INSERT INTO num_exp_add VALUES (5,0,'16397.038491');
  220. INSERT INTO num_exp_sub VALUES (5,0,'16397.038491');
  221. INSERT INTO num_exp_mul VALUES (5,0,'0');
  222. INSERT INTO num_exp_div VALUES (5,0,'NaN');
  223. INSERT INTO num_exp_add VALUES (5,1,'16397.038491');
  224. INSERT INTO num_exp_sub VALUES (5,1,'16397.038491');
  225. INSERT INTO num_exp_mul VALUES (5,1,'0');
  226. INSERT INTO num_exp_div VALUES (5,1,'NaN');
  227. INSERT INTO num_exp_add VALUES (5,2,'-34322095.176906047');
  228. INSERT INTO num_exp_sub VALUES (5,2,'34354889.253888047');
  229. INSERT INTO num_exp_mul VALUES (5,2,'-563049578578.769242506736077');
  230. INSERT INTO num_exp_div VALUES (5,2,'-.00047751189505192446');
  231. INSERT INTO num_exp_add VALUES (5,3,'16401.348491');
  232. INSERT INTO num_exp_sub VALUES (5,3,'16392.728491');
  233. INSERT INTO num_exp_mul VALUES (5,3,'70671.23589621');
  234. INSERT INTO num_exp_div VALUES (5,3,'3804.41728329466357308584');
  235. INSERT INTO num_exp_add VALUES (5,4,'7815858.450391');
  236. INSERT INTO num_exp_sub VALUES (5,4,'-7783064.373409');
  237. INSERT INTO num_exp_mul VALUES (5,4,'127888068979.9935054429');
  238. INSERT INTO num_exp_div VALUES (5,4,'.00210232958726897192');
  239. INSERT INTO num_exp_add VALUES (5,5,'32794.076982');
  240. INSERT INTO num_exp_sub VALUES (5,5,'0');
  241. INSERT INTO num_exp_mul VALUES (5,5,'268862871.275335557081');
  242. INSERT INTO num_exp_div VALUES (5,5,'1.00000000000000000000');
  243. INSERT INTO num_exp_add VALUES (5,6,'110298.61612126');
  244. INSERT INTO num_exp_sub VALUES (5,6,'-77504.53913926');
  245. INSERT INTO num_exp_mul VALUES (5,6,'1539707782.76899778633766');
  246. INSERT INTO num_exp_div VALUES (5,6,'.17461941433576102689');
  247. INSERT INTO num_exp_add VALUES (5,7,'-83012087.961509');
  248. INSERT INTO num_exp_sub VALUES (5,7,'83044882.038491');
  249. INSERT INTO num_exp_mul VALUES (5,7,'-1361421264394.416135');
  250. INSERT INTO num_exp_div VALUES (5,7,'-.00019748690453643710');
  251. INSERT INTO num_exp_add VALUES (5,8,'91278.038491');
  252. INSERT INTO num_exp_sub VALUES (5,8,'-58483.961509');
  253. INSERT INTO num_exp_mul VALUES (5,8,'1227826639.244571');
  254. INSERT INTO num_exp_div VALUES (5,8,'.21897461960978085228');
  255. INSERT INTO num_exp_add VALUES (5,9,'-24910407.006556420');
  256. INSERT INTO num_exp_sub VALUES (5,9,'24943201.083538420');
  257. INSERT INTO num_exp_mul VALUES (5,9,'-408725765384.257043660243220');
  258. INSERT INTO num_exp_div VALUES (5,9,'-.00065780749354660427');
  259. INSERT INTO num_exp_add VALUES (6,0,'93901.57763026');
  260. INSERT INTO num_exp_sub VALUES (6,0,'93901.57763026');
  261. INSERT INTO num_exp_mul VALUES (6,0,'0');
  262. INSERT INTO num_exp_div VALUES (6,0,'NaN');
  263. INSERT INTO num_exp_add VALUES (6,1,'93901.57763026');
  264. INSERT INTO num_exp_sub VALUES (6,1,'93901.57763026');
  265. INSERT INTO num_exp_mul VALUES (6,1,'0');
  266. INSERT INTO num_exp_div VALUES (6,1,'NaN');
  267. INSERT INTO num_exp_add VALUES (6,2,'-34244590.637766787');
  268. INSERT INTO num_exp_sub VALUES (6,2,'34432393.793027307');
  269. INSERT INTO num_exp_mul VALUES (6,2,'-3224438592470.18449811926184222');
  270. INSERT INTO num_exp_div VALUES (6,2,'-.00273458651128995823');
  271. INSERT INTO num_exp_add VALUES (6,3,'93905.88763026');
  272. INSERT INTO num_exp_sub VALUES (6,3,'93897.26763026');
  273. INSERT INTO num_exp_mul VALUES (6,3,'404715.7995864206');
  274. INSERT INTO num_exp_div VALUES (6,3,'21786.90896293735498839907');
  275. INSERT INTO num_exp_add VALUES (6,4,'7893362.98953026');
  276. INSERT INTO num_exp_sub VALUES (6,4,'-7705559.83426974');
  277. INSERT INTO num_exp_mul VALUES (6,4,'732381731243.745115764094');
  278. INSERT INTO num_exp_div VALUES (6,4,'.01203949512295682469');
  279. INSERT INTO num_exp_add VALUES (6,5,'110298.61612126');
  280. INSERT INTO num_exp_sub VALUES (6,5,'77504.53913926');
  281. INSERT INTO num_exp_mul VALUES (6,5,'1539707782.76899778633766');
  282. INSERT INTO num_exp_div VALUES (6,5,'5.72674008674192359679');
  283. INSERT INTO num_exp_add VALUES (6,6,'187803.15526052');
  284. INSERT INTO num_exp_sub VALUES (6,6,'0');
  285. INSERT INTO num_exp_mul VALUES (6,6,'8817506281.4517452372676676');
  286. INSERT INTO num_exp_div VALUES (6,6,'1.00000000000000000000');
  287. INSERT INTO num_exp_add VALUES (6,7,'-82934583.42236974');
  288. INSERT INTO num_exp_sub VALUES (6,7,'83122386.57763026');
  289. INSERT INTO num_exp_mul VALUES (6,7,'-7796505729750.37795610');
  290. INSERT INTO num_exp_div VALUES (6,7,'-.00113095617281538980');
  291. INSERT INTO num_exp_add VALUES (6,8,'168782.57763026');
  292. INSERT INTO num_exp_sub VALUES (6,8,'19020.57763026');
  293. INSERT INTO num_exp_mul VALUES (6,8,'7031444034.53149906');
  294. INSERT INTO num_exp_div VALUES (6,8,'1.25401073209839612184');
  295. INSERT INTO num_exp_add VALUES (6,9,'-24832902.467417160');
  296. INSERT INTO num_exp_sub VALUES (6,9,'25020705.622677680');
  297. INSERT INTO num_exp_mul VALUES (6,9,'-2340666225110.29929521292692920');
  298. INSERT INTO num_exp_div VALUES (6,9,'-.00376709254265256789');
  299. INSERT INTO num_exp_add VALUES (7,0,'-83028485');
  300. INSERT INTO num_exp_sub VALUES (7,0,'-83028485');
  301. INSERT INTO num_exp_mul VALUES (7,0,'0');
  302. INSERT INTO num_exp_div VALUES (7,0,'NaN');
  303. INSERT INTO num_exp_add VALUES (7,1,'-83028485');
  304. INSERT INTO num_exp_sub VALUES (7,1,'-83028485');
  305. INSERT INTO num_exp_mul VALUES (7,1,'0');
  306. INSERT INTO num_exp_div VALUES (7,1,'NaN');
  307. INSERT INTO num_exp_add VALUES (7,2,'-117366977.215397047');
  308. INSERT INTO num_exp_sub VALUES (7,2,'-48689992.784602953');
  309. INSERT INTO num_exp_mul VALUES (7,2,'2851072985828710.485883795');
  310. INSERT INTO num_exp_div VALUES (7,2,'2.41794207151503385700');
  311. INSERT INTO num_exp_add VALUES (7,3,'-83028480.69');
  312. INSERT INTO num_exp_sub VALUES (7,3,'-83028489.31');
  313. INSERT INTO num_exp_mul VALUES (7,3,'-357852770.35');
  314. INSERT INTO num_exp_div VALUES (7,3,'-19264149.65197215777262180974');
  315. INSERT INTO num_exp_add VALUES (7,4,'-75229023.5881');
  316. INSERT INTO num_exp_sub VALUES (7,4,'-90827946.4119');
  317. INSERT INTO num_exp_mul VALUES (7,4,'-647577464846017.9715');
  318. INSERT INTO num_exp_div VALUES (7,4,'-10.64541262725136247686');
  319. INSERT INTO num_exp_add VALUES (7,5,'-83012087.961509');
  320. INSERT INTO num_exp_sub VALUES (7,5,'-83044882.038491');
  321. INSERT INTO num_exp_mul VALUES (7,5,'-1361421264394.416135');
  322. INSERT INTO num_exp_div VALUES (7,5,'-5063.62688881730941836574');
  323. INSERT INTO num_exp_add VALUES (7,6,'-82934583.42236974');
  324. INSERT INTO num_exp_sub VALUES (7,6,'-83122386.57763026');
  325. INSERT INTO num_exp_mul VALUES (7,6,'-7796505729750.37795610');
  326. INSERT INTO num_exp_div VALUES (7,6,'-884.20756174009028770294');
  327. INSERT INTO num_exp_add VALUES (7,7,'-166056970');
  328. INSERT INTO num_exp_sub VALUES (7,7,'0');
  329. INSERT INTO num_exp_mul VALUES (7,7,'6893729321395225');
  330. INSERT INTO num_exp_div VALUES (7,7,'1.00000000000000000000');
  331. INSERT INTO num_exp_add VALUES (7,8,'-82953604');
  332. INSERT INTO num_exp_sub VALUES (7,8,'-83103366');
  333. INSERT INTO num_exp_mul VALUES (7,8,'-6217255985285');
  334. INSERT INTO num_exp_div VALUES (7,8,'-1108.80577182462841041118');
  335. INSERT INTO num_exp_add VALUES (7,9,'-107955289.045047420');
  336. INSERT INTO num_exp_sub VALUES (7,9,'-58101680.954952580');
  337. INSERT INTO num_exp_mul VALUES (7,9,'2069634775752159.035758700');
  338. INSERT INTO num_exp_div VALUES (7,9,'3.33089171198810413382');
  339. INSERT INTO num_exp_add VALUES (8,0,'74881');
  340. INSERT INTO num_exp_sub VALUES (8,0,'74881');
  341. INSERT INTO num_exp_mul VALUES (8,0,'0');
  342. INSERT INTO num_exp_div VALUES (8,0,'NaN');
  343. INSERT INTO num_exp_add VALUES (8,1,'74881');
  344. INSERT INTO num_exp_sub VALUES (8,1,'74881');
  345. INSERT INTO num_exp_mul VALUES (8,1,'0');
  346. INSERT INTO num_exp_div VALUES (8,1,'NaN');
  347. INSERT INTO num_exp_add VALUES (8,2,'-34263611.215397047');
  348. INSERT INTO num_exp_sub VALUES (8,2,'34413373.215397047');
  349. INSERT INTO num_exp_mul VALUES (8,2,'-2571300635581.146276407');
  350. INSERT INTO num_exp_div VALUES (8,2,'-.00218067233500788615');
  351. INSERT INTO num_exp_add VALUES (8,3,'74885.31');
  352. INSERT INTO num_exp_sub VALUES (8,3,'74876.69');
  353. INSERT INTO num_exp_mul VALUES (8,3,'322737.11');
  354. INSERT INTO num_exp_div VALUES (8,3,'17373.78190255220417633410');
  355. INSERT INTO num_exp_add VALUES (8,4,'7874342.4119');
  356. INSERT INTO num_exp_sub VALUES (8,4,'-7724580.4119');
  357. INSERT INTO num_exp_mul VALUES (8,4,'584031469984.4839');
  358. INSERT INTO num_exp_div VALUES (8,4,'.00960079113741758956');
  359. INSERT INTO num_exp_add VALUES (8,5,'91278.038491');
  360. INSERT INTO num_exp_sub VALUES (8,5,'58483.961509');
  361. INSERT INTO num_exp_mul VALUES (8,5,'1227826639.244571');
  362. INSERT INTO num_exp_div VALUES (8,5,'4.56673929509287019456');
  363. INSERT INTO num_exp_add VALUES (8,6,'168782.57763026');
  364. INSERT INTO num_exp_sub VALUES (8,6,'-19020.57763026');
  365. INSERT INTO num_exp_mul VALUES (8,6,'7031444034.53149906');
  366. INSERT INTO num_exp_div VALUES (8,6,'.79744134113322314424');
  367. INSERT INTO num_exp_add VALUES (8,7,'-82953604');
  368. INSERT INTO num_exp_sub VALUES (8,7,'83103366');
  369. INSERT INTO num_exp_mul VALUES (8,7,'-6217255985285');
  370. INSERT INTO num_exp_div VALUES (8,7,'-.00090187120721280172');
  371. INSERT INTO num_exp_add VALUES (8,8,'149762');
  372. INSERT INTO num_exp_sub VALUES (8,8,'0');
  373. INSERT INTO num_exp_mul VALUES (8,8,'5607164161');
  374. INSERT INTO num_exp_div VALUES (8,8,'1.00000000000000000000');
  375. INSERT INTO num_exp_add VALUES (8,9,'-24851923.045047420');
  376. INSERT INTO num_exp_sub VALUES (8,9,'25001685.045047420');
  377. INSERT INTO num_exp_mul VALUES (8,9,'-1866544013697.195857020');
  378. INSERT INTO num_exp_div VALUES (8,9,'-.00300403532938582735');
  379. INSERT INTO num_exp_add VALUES (9,0,'-24926804.045047420');
  380. INSERT INTO num_exp_sub VALUES (9,0,'-24926804.045047420');
  381. INSERT INTO num_exp_mul VALUES (9,0,'0');
  382. INSERT INTO num_exp_div VALUES (9,0,'NaN');
  383. INSERT INTO num_exp_add VALUES (9,1,'-24926804.045047420');
  384. INSERT INTO num_exp_sub VALUES (9,1,'-24926804.045047420');
  385. INSERT INTO num_exp_mul VALUES (9,1,'0');
  386. INSERT INTO num_exp_div VALUES (9,1,'NaN');
  387. INSERT INTO num_exp_add VALUES (9,2,'-59265296.260444467');
  388. INSERT INTO num_exp_sub VALUES (9,2,'9411688.170349627');
  389. INSERT INTO num_exp_mul VALUES (9,2,'855948866655588.453741509242968740');
  390. INSERT INTO num_exp_div VALUES (9,2,'.72591434384152961526');
  391. INSERT INTO num_exp_add VALUES (9,3,'-24926799.735047420');
  392. INSERT INTO num_exp_sub VALUES (9,3,'-24926808.355047420');
  393. INSERT INTO num_exp_mul VALUES (9,3,'-107434525.43415438020');
  394. INSERT INTO num_exp_div VALUES (9,3,'-5783481.21694835730858468677');
  395. INSERT INTO num_exp_add VALUES (9,4,'-17127342.633147420');
  396. INSERT INTO num_exp_sub VALUES (9,4,'-32726265.456947420');
  397. INSERT INTO num_exp_mul VALUES (9,4,'-194415646271340.1815956522980');
  398. INSERT INTO num_exp_div VALUES (9,4,'-3.19596478892958416484');
  399. INSERT INTO num_exp_add VALUES (9,5,'-24910407.006556420');
  400. INSERT INTO num_exp_sub VALUES (9,5,'-24943201.083538420');
  401. INSERT INTO num_exp_mul VALUES (9,5,'-408725765384.257043660243220');
  402. INSERT INTO num_exp_div VALUES (9,5,'-1520.20159364322004505807');
  403. INSERT INTO num_exp_add VALUES (9,6,'-24832902.467417160');
  404. INSERT INTO num_exp_sub VALUES (9,6,'-25020705.622677680');
  405. INSERT INTO num_exp_mul VALUES (9,6,'-2340666225110.29929521292692920');
  406. INSERT INTO num_exp_div VALUES (9,6,'-265.45671195426965751280');
  407. INSERT INTO num_exp_add VALUES (9,7,'-107955289.045047420');
  408. INSERT INTO num_exp_sub VALUES (9,7,'58101680.954952580');
  409. INSERT INTO num_exp_mul VALUES (9,7,'2069634775752159.035758700');
  410. INSERT INTO num_exp_div VALUES (9,7,'.30021990699995814689');
  411. INSERT INTO num_exp_add VALUES (9,8,'-24851923.045047420');
  412. INSERT INTO num_exp_sub VALUES (9,8,'-25001685.045047420');
  413. INSERT INTO num_exp_mul VALUES (9,8,'-1866544013697.195857020');
  414. INSERT INTO num_exp_div VALUES (9,8,'-332.88556569820675471748');
  415. INSERT INTO num_exp_add VALUES (9,9,'-49853608.090094840');
  416. INSERT INTO num_exp_sub VALUES (9,9,'0');
  417. INSERT INTO num_exp_mul VALUES (9,9,'621345559900192.420120630048656400');
  418. INSERT INTO num_exp_div VALUES (9,9,'1.00000000000000000000');
  419. COMMIT TRANSACTION;
  420. BEGIN TRANSACTION;
  421. INSERT INTO num_exp_sqrt VALUES (0,'0');
  422. INSERT INTO num_exp_sqrt VALUES (1,'0');
  423. INSERT INTO num_exp_sqrt VALUES (2,'5859.90547836712524903505');
  424. INSERT INTO num_exp_sqrt VALUES (3,'2.07605394920266944396');
  425. INSERT INTO num_exp_sqrt VALUES (4,'2792.75158435189147418923');
  426. INSERT INTO num_exp_sqrt VALUES (5,'128.05092147657509145473');
  427. INSERT INTO num_exp_sqrt VALUES (6,'306.43364311096782703406');
  428. INSERT INTO num_exp_sqrt VALUES (7,'9111.99676251039939975230');
  429. INSERT INTO num_exp_sqrt VALUES (8,'273.64392922189960397542');
  430. INSERT INTO num_exp_sqrt VALUES (9,'4992.67503899937593364766');
  431. COMMIT TRANSACTION;
  432. BEGIN TRANSACTION;
  433. INSERT INTO num_exp_ln VALUES (0,'NaN');
  434. INSERT INTO num_exp_ln VALUES (1,'NaN');
  435. INSERT INTO num_exp_ln VALUES (2,'17.35177750493897715514');
  436. INSERT INTO num_exp_ln VALUES (3,'1.46093790411565641971');
  437. INSERT INTO num_exp_ln VALUES (4,'15.86956523951936572464');
  438. INSERT INTO num_exp_ln VALUES (5,'9.70485601768871834038');
  439. INSERT INTO num_exp_ln VALUES (6,'11.45000246622944403127');
  440. INSERT INTO num_exp_ln VALUES (7,'18.23469429965478772991');
  441. INSERT INTO num_exp_ln VALUES (8,'11.22365546576315513668');
  442. INSERT INTO num_exp_ln VALUES (9,'17.03145425013166006962');
  443. COMMIT TRANSACTION;
  444. BEGIN TRANSACTION;
  445. INSERT INTO num_exp_log10 VALUES (0,'NaN');
  446. INSERT INTO num_exp_log10 VALUES (1,'NaN');
  447. INSERT INTO num_exp_log10 VALUES (2,'7.53578122160797276459');
  448. INSERT INTO num_exp_log10 VALUES (3,'.63447727016073160075');
  449. INSERT INTO num_exp_log10 VALUES (4,'6.89206461372691743345');
  450. INSERT INTO num_exp_log10 VALUES (5,'4.21476541614777768626');
  451. INSERT INTO num_exp_log10 VALUES (6,'4.97267288886207207671');
  452. INSERT INTO num_exp_log10 VALUES (7,'7.91922711353275546914');
  453. INSERT INTO num_exp_log10 VALUES (8,'4.87437163556421004138');
  454. INSERT INTO num_exp_log10 VALUES (9,'7.39666659961986567059');
  455. COMMIT TRANSACTION;
  456. BEGIN TRANSACTION;
  457. INSERT INTO num_exp_power_10_ln VALUES (0,'NaN');
  458. INSERT INTO num_exp_power_10_ln VALUES (1,'NaN');
  459. INSERT INTO num_exp_power_10_ln VALUES (2,'224790267919917955.13261618583642653184');
  460. INSERT INTO num_exp_power_10_ln VALUES (3,'28.90266599445155957393');
  461. INSERT INTO num_exp_power_10_ln VALUES (4,'7405685069594999.07733999469386277636');
  462. INSERT INTO num_exp_power_10_ln VALUES (5,'5068226527.32127265408584640098');
  463. INSERT INTO num_exp_power_10_ln VALUES (6,'281839893606.99372343357047819067');
  464. INSERT INTO num_exp_power_10_ln VALUES (7,'1716699575118597095.42330819910640247627');
  465. INSERT INTO num_exp_power_10_ln VALUES (8,'167361463828.07491320069016125952');
  466. INSERT INTO num_exp_power_10_ln VALUES (9,'107511333880052007.04141124673540337457');
  467. COMMIT TRANSACTION;
  468. BEGIN TRANSACTION;
  469. INSERT INTO num_data VALUES (0, '0');
  470. INSERT INTO num_data VALUES (1, '0');
  471. INSERT INTO num_data VALUES (2, '-34338492.215397047');
  472. INSERT INTO num_data VALUES (3, '4.31');
  473. INSERT INTO num_data VALUES (4, '7799461.4119');
  474. INSERT INTO num_data VALUES (5, '16397.038491');
  475. INSERT INTO num_data VALUES (6, '93901.57763026');
  476. INSERT INTO num_data VALUES (7, '-83028485');
  477. INSERT INTO num_data VALUES (8, '74881');
  478. INSERT INTO num_data VALUES (9, '-24926804.045047420');
  479. COMMIT TRANSACTION;
  480. SELECT t1.id1, t1.id2, t1.result, t2.expected
  481. FROM num_result t1, num_exp_add t2
  482. WHERE t1.id1 = t2.id1 AND t1.id2 = t2.id2
  483. AND t1.result != t2.expected;
  484. id1 | id2 | result | expected
  485. -----+-----+--------+----------
  486. (0 rows)
  487. SELECT t1.id1, t1.id2, t1.result, round(t2.expected, 10) as expected
  488. FROM num_result t1, num_exp_add t2
  489. WHERE t1.id1 = t2.id1 AND t1.id2 = t2.id2
  490. AND t1.result != round(t2.expected, 10);
  491. id1 | id2 | result | expected
  492. -----+-----+--------+----------
  493. (0 rows)
  494. SELECT t1.id1, t1.id2, t1.result, t2.expected
  495. FROM num_result t1, num_exp_sub t2
  496. WHERE t1.id1 = t2.id1 AND t1.id2 = t2.id2
  497. AND t1.result != t2.expected;
  498. id1 | id2 | result | expected
  499. -----+-----+--------+----------
  500. (0 rows)
  501. SELECT t1.id1, t1.id2, t1.result, round(t2.expected, 40)
  502. FROM num_result t1, num_exp_sub t2
  503. WHERE t1.id1 = t2.id1 AND t1.id2 = t2.id2
  504. AND t1.result != round(t2.expected, 40);
  505. id1 | id2 | result | round
  506. -----+-----+--------+-------
  507. (0 rows)
  508. SELECT t1.id1, t1.id2, t1.result, t2.expected
  509. FROM num_result t1, num_exp_mul t2
  510. WHERE t1.id1 = t2.id1 AND t1.id2 = t2.id2
  511. AND t1.result != t2.expected;
  512. id1 | id2 | result | expected
  513. -----+-----+--------+----------
  514. (0 rows)
  515. SELECT t1.id1, t1.id2, t1.result, round(t2.expected, 30) as expected
  516. FROM num_result t1, num_exp_mul t2
  517. WHERE t1.id1 = t2.id1 AND t1.id2 = t2.id2
  518. AND t1.result != round(t2.expected, 30);
  519. id1 | id2 | result | expected
  520. -----+-----+--------+----------
  521. (0 rows)
  522. SELECT t1.id1, t1.id2, t1.result, t2.expected
  523. FROM num_result t1, num_exp_div t2
  524. WHERE t1.id1 = t2.id1 AND t1.id2 = t2.id2
  525. AND t1.result != t2.expected;
  526. id1 | id2 | result | expected
  527. -----+-----+--------+----------
  528. (0 rows)
  529. SELECT t1.id1, t1.id2, t1.result, round(t2.expected, 80) as expected
  530. FROM num_result t1, num_exp_div t2
  531. WHERE t1.id1 = t2.id1 AND t1.id2 = t2.id2
  532. AND t1.result != round(t2.expected, 80);
  533. id1 | id2 | result | expected
  534. -----+-----+--------+----------
  535. (0 rows)
  536. INSERT INTO num_result SELECT id, 0, SQRT(ABS(val))
  537. FROM num_data;
  538. INSERT INTO num_result SELECT id, 0, LN(ABS(val))
  539. FROM num_data
  540. WHERE val != '0.0';
  541. INSERT INTO num_result SELECT id, 0, LOG(numeric '10', ABS(val))
  542. FROM num_data
  543. WHERE val != '0.0';
  544. INSERT INTO num_result SELECT id, 0, POWER(numeric '10', LN(ABS(round(val,200))))
  545. FROM num_data
  546. WHERE val != '0.0';
  547. SELECT 'inf'::numeric / '0';
  548. ERROR: division by zero
  549. SELECT '-inf'::numeric / '0';
  550. ERROR: division by zero
  551. SELECT 'nan'::numeric / '0';
  552. ?column?
  553. ----------
  554. NaN
  555. (1 row)
  556. SELECT '0'::numeric / '0';
  557. ERROR: division by zero
  558. SELECT 'inf'::numeric % '0';
  559. ERROR: division by zero
  560. SELECT '-inf'::numeric % '0';
  561. ERROR: division by zero
  562. SELECT 'nan'::numeric % '0';
  563. ?column?
  564. ----------
  565. NaN
  566. (1 row)
  567. SELECT '0'::numeric % '0';
  568. ERROR: division by zero
  569. SELECT div('inf'::numeric, '0');
  570. ERROR: division by zero
  571. SELECT div('-inf'::numeric, '0');
  572. ERROR: division by zero
  573. SELECT div('nan'::numeric, '0');
  574. div
  575. -----
  576. NaN
  577. (1 row)
  578. SELECT div('0'::numeric, '0');
  579. ERROR: division by zero
  580. -- the large values fall into the numeric abbreviation code's maximal classes
  581. WITH v(x) AS
  582. (VALUES('0'::numeric),('1'),('-1'),('4.2'),('-7.777'),('1e340'),('-1e340'),
  583. ('inf'),('-inf'),('nan'),
  584. ('inf'),('-inf'),('nan'))
  585. SELECT substring(x::text, 1, 32)
  586. FROM v ORDER BY x;
  587. substring
  588. ----------------------------------
  589. -Infinity
  590. -Infinity
  591. -1000000000000000000000000000000
  592. -7.777
  593. -1
  594. 0
  595. 1
  596. 4.2
  597. 10000000000000000000000000000000
  598. Infinity
  599. Infinity
  600. NaN
  601. NaN
  602. (13 rows)
  603. SELECT sqrt('-1'::numeric);
  604. ERROR: cannot take square root of a negative number
  605. SELECT sqrt('-inf'::numeric);
  606. ERROR: cannot take square root of a negative number
  607. SELECT ln('0'::numeric);
  608. ERROR: cannot take logarithm of zero
  609. SELECT ln('-1'::numeric);
  610. ERROR: cannot take logarithm of a negative number
  611. SELECT ln('-inf'::numeric);
  612. ERROR: cannot take logarithm of a negative number
  613. SELECT log('0'::numeric, '10');
  614. ERROR: cannot take logarithm of zero
  615. SELECT log('10'::numeric, '0');
  616. ERROR: cannot take logarithm of zero
  617. SELECT log('-inf'::numeric, '10');
  618. ERROR: cannot take logarithm of a negative number
  619. SELECT log('10'::numeric, '-inf');
  620. ERROR: cannot take logarithm of a negative number
  621. SELECT log('inf'::numeric, '0');
  622. ERROR: cannot take logarithm of zero
  623. SELECT log('inf'::numeric, '-inf');
  624. ERROR: cannot take logarithm of a negative number
  625. SELECT log('-inf'::numeric, 'inf');
  626. ERROR: cannot take logarithm of a negative number
  627. SELECT power('0'::numeric, '-1');
  628. ERROR: zero raised to a negative power is undefined
  629. SELECT power('0'::numeric, '-inf');
  630. ERROR: zero raised to a negative power is undefined
  631. SELECT power('-1'::numeric, 'inf');
  632. power
  633. -------
  634. 1
  635. (1 row)
  636. SELECT power('-2'::numeric, '3');
  637. power
  638. ---------------------
  639. -8.0000000000000000
  640. (1 row)
  641. SELECT power('-2'::numeric, '3.3');
  642. ERROR: a negative number raised to a non-integer power yields a complex result
  643. SELECT power('-2'::numeric, '-1');
  644. power
  645. ---------------------
  646. -0.5000000000000000
  647. (1 row)
  648. SELECT power('-2'::numeric, '-1.5');
  649. ERROR: a negative number raised to a non-integer power yields a complex result
  650. SELECT power('-2'::numeric, 'inf');
  651. power
  652. ----------
  653. Infinity
  654. (1 row)
  655. SELECT power('-inf'::numeric, '2');
  656. power
  657. ----------
  658. Infinity
  659. (1 row)
  660. SELECT power('-inf'::numeric, '3');
  661. power
  662. -----------
  663. -Infinity
  664. (1 row)
  665. SELECT power('-inf'::numeric, '4.5');
  666. ERROR: a negative number raised to a non-integer power yields a complex result
  667. SELECT power('-inf'::numeric, '0');
  668. power
  669. -------
  670. 1
  671. (1 row)
  672. SELECT power('-inf'::numeric, 'inf');
  673. power
  674. ----------
  675. Infinity
  676. (1 row)
  677. -- ******************************
  678. -- * miscellaneous checks for things that have been broken in the past...
  679. -- ******************************
  680. -- numeric AVG used to fail on some platforms
  681. SELECT AVG(val) FROM num_data;
  682. avg
  683. ------------------------
  684. -13430913.592242320700
  685. (1 row)
  686. -- Check for appropriate rounding and overflow
  687. CREATE TABLE fract_only (id int, val numeric(4,4));
  688. INSERT INTO fract_only VALUES (1, '0.0');
  689. INSERT INTO fract_only VALUES (2, '0.1');
  690. INSERT INTO fract_only VALUES (4, '-0.9999');
  691. INSERT INTO fract_only VALUES (5, '0.99994');
  692. INSERT INTO fract_only VALUES (7, '0.00001');
  693. INSERT INTO fract_only VALUES (8, '0.00017');
  694. INSERT INTO fract_only VALUES (9, 'NaN');
  695. DROP TABLE fract_only;
  696. -- Check conversion to integers
  697. SELECT (-9223372036854775808.5)::int8; -- should fail
  698. ERROR: bigint out of range
  699. SELECT (-9223372036854775808.4)::int8; -- ok
  700. int8
  701. ----------------------
  702. -9223372036854775808
  703. (1 row)
  704. SELECT 9223372036854775807.4::int8; -- ok
  705. int8
  706. ---------------------
  707. 9223372036854775807
  708. (1 row)
  709. SELECT 9223372036854775807.5::int8; -- should fail
  710. ERROR: bigint out of range
  711. SELECT (-2147483648.5)::int4; -- should fail
  712. ERROR: integer out of range
  713. SELECT (-2147483648.4)::int4; -- ok
  714. int4
  715. -------------
  716. -2147483648
  717. (1 row)
  718. SELECT 2147483647.4::int4; -- ok
  719. int4
  720. ------------
  721. 2147483647
  722. (1 row)
  723. SELECT 2147483647.5::int4; -- should fail
  724. ERROR: integer out of range
  725. SELECT (-32768.5)::int2; -- should fail
  726. ERROR: smallint out of range
  727. SELECT (-32768.4)::int2; -- ok
  728. int2
  729. --------
  730. -32768
  731. (1 row)
  732. SELECT 32767.4::int2; -- ok
  733. int2
  734. -------
  735. 32767
  736. (1 row)
  737. SELECT 32767.5::int2; -- should fail
  738. ERROR: smallint out of range
  739. -- Check inf/nan conversion behavior
  740. SELECT 'NaN'::float8::numeric;
  741. numeric
  742. ---------
  743. NaN
  744. (1 row)
  745. SELECT 'Infinity'::float8::numeric;
  746. numeric
  747. ----------
  748. Infinity
  749. (1 row)
  750. SELECT '-Infinity'::float8::numeric;
  751. numeric
  752. -----------
  753. -Infinity
  754. (1 row)
  755. SELECT 'NaN'::numeric::float8;
  756. float8
  757. --------
  758. NaN
  759. (1 row)
  760. SELECT 'Infinity'::numeric::float8;
  761. float8
  762. ----------
  763. Infinity
  764. (1 row)
  765. SELECT '-Infinity'::numeric::float8;
  766. float8
  767. -----------
  768. -Infinity
  769. (1 row)
  770. SELECT 'NaN'::float4::numeric;
  771. numeric
  772. ---------
  773. NaN
  774. (1 row)
  775. SELECT 'Infinity'::float4::numeric;
  776. numeric
  777. ----------
  778. Infinity
  779. (1 row)
  780. SELECT '-Infinity'::float4::numeric;
  781. numeric
  782. -----------
  783. -Infinity
  784. (1 row)
  785. SELECT 'NaN'::numeric::float4;
  786. float4
  787. --------
  788. NaN
  789. (1 row)
  790. SELECT 'Infinity'::numeric::float4;
  791. float4
  792. ----------
  793. Infinity
  794. (1 row)
  795. SELECT '-Infinity'::numeric::float4;
  796. float4
  797. -----------
  798. -Infinity
  799. (1 row)
  800. SELECT '42'::int2::numeric;
  801. numeric
  802. ---------
  803. 42
  804. (1 row)
  805. SELECT 'NaN'::numeric::int2;
  806. ERROR: cannot convert NaN to smallint
  807. SELECT 'Infinity'::numeric::int2;
  808. ERROR: cannot convert infinity to smallint
  809. SELECT '-Infinity'::numeric::int2;
  810. ERROR: cannot convert infinity to smallint
  811. SELECT 'NaN'::numeric::int4;
  812. ERROR: cannot convert NaN to integer
  813. SELECT 'Infinity'::numeric::int4;
  814. ERROR: cannot convert infinity to integer
  815. SELECT '-Infinity'::numeric::int4;
  816. ERROR: cannot convert infinity to integer
  817. SELECT 'NaN'::numeric::int8;
  818. ERROR: cannot convert NaN to bigint
  819. SELECT 'Infinity'::numeric::int8;
  820. ERROR: cannot convert infinity to bigint
  821. SELECT '-Infinity'::numeric::int8;
  822. ERROR: cannot convert infinity to bigint
  823. -- Simple check that ceil(), floor(), and round() work correctly
  824. CREATE TABLE ceil_floor_round (a numeric);
  825. INSERT INTO ceil_floor_round VALUES ('-5.5');
  826. INSERT INTO ceil_floor_round VALUES ('-5.499999');
  827. INSERT INTO ceil_floor_round VALUES ('9.5');
  828. INSERT INTO ceil_floor_round VALUES ('9.4999999');
  829. INSERT INTO ceil_floor_round VALUES ('0.0');
  830. INSERT INTO ceil_floor_round VALUES ('0.0000001');
  831. INSERT INTO ceil_floor_round VALUES ('-0.000001');
  832. DROP TABLE ceil_floor_round;
  833. -- Testing for width_bucket(). For convenience, we test both the
  834. -- numeric and float8 versions of the function in this file.
  835. -- errors
  836. SELECT width_bucket(5.0, 3.0, 4.0, 0);
  837. ERROR: count must be greater than zero
  838. SELECT width_bucket(5.0, 3.0, 4.0, -5);
  839. ERROR: count must be greater than zero
  840. SELECT width_bucket(3.5, 3.0, 3.0, 888);
  841. ERROR: lower bound cannot equal upper bound
  842. SELECT width_bucket(5.0::float8, 3.0::float8, 4.0::float8, 0);
  843. ERROR: count must be greater than zero
  844. SELECT width_bucket(5.0::float8, 3.0::float8, 4.0::float8, -5);
  845. ERROR: count must be greater than zero
  846. SELECT width_bucket(3.5::float8, 3.0::float8, 3.0::float8, 888);
  847. ERROR: lower bound cannot equal upper bound
  848. SELECT width_bucket('NaN', 3.0, 4.0, 888);
  849. ERROR: operand, lower bound, and upper bound cannot be NaN
  850. SELECT width_bucket(0::float8, 'NaN', 4.0::float8, 888);
  851. ERROR: operand, lower bound, and upper bound cannot be NaN
  852. SELECT width_bucket(2.0, 3.0, '-inf', 888);
  853. ERROR: lower and upper bounds must be finite
  854. SELECT width_bucket(0::float8, '-inf', 4.0::float8, 888);
  855. ERROR: lower and upper bounds must be finite
  856. -- normal operation
  857. CREATE TABLE width_bucket_test (operand_num numeric, operand_f8 float8);
  858. -- Check positive and negative infinity: we require
  859. -- finite bucket bounds, but allow an infinite operand
  860. SELECT width_bucket(0.0::numeric, 'Infinity'::numeric, 5, 10); -- error
  861. ERROR: lower and upper bounds must be finite
  862. SELECT width_bucket(0.0::numeric, 5, '-Infinity'::numeric, 20); -- error
  863. ERROR: lower and upper bounds must be finite
  864. SELECT width_bucket(0.0::float8, 'Infinity'::float8, 5, 10); -- error
  865. ERROR: lower and upper bounds must be finite
  866. SELECT width_bucket(0.0::float8, 5, '-Infinity'::float8, 20); -- error
  867. ERROR: lower and upper bounds must be finite
  868. DROP TABLE width_bucket_test;
  869. -- Simple test for roundoff error when results should be exact
  870. SELECT x, width_bucket(x::float8, 10, 100, 9) as flt,
  871. width_bucket(x::numeric, 10, 100, 9) as num
  872. FROM generate_series(0, 110, 10) x;
  873. x | flt | num
  874. -----+-----+-----
  875. 0 | 0 | 0
  876. 10 | 1 | 1
  877. 20 | 2 | 2
  878. 30 | 3 | 3
  879. 40 | 4 | 4
  880. 50 | 5 | 5
  881. 60 | 6 | 6
  882. 70 | 7 | 7
  883. 80 | 8 | 8
  884. 90 | 9 | 9
  885. 100 | 10 | 10
  886. 110 | 10 | 10
  887. (12 rows)
  888. SELECT x, width_bucket(x::float8, 100, 10, 9) as flt,
  889. width_bucket(x::numeric, 100, 10, 9) as num
  890. FROM generate_series(0, 110, 10) x;
  891. x | flt | num
  892. -----+-----+-----
  893. 0 | 10 | 10
  894. 10 | 10 | 10
  895. 20 | 9 | 9
  896. 30 | 8 | 8
  897. 40 | 7 | 7
  898. 50 | 6 | 6
  899. 60 | 5 | 5
  900. 70 | 4 | 4
  901. 80 | 3 | 3
  902. 90 | 2 | 2
  903. 100 | 1 | 1
  904. 110 | 0 | 0
  905. (12 rows)
  906. --
  907. -- TO_CHAR()
  908. --
  909. SELECT to_char(val, '9G999G999G999G999G999')
  910. FROM num_data;
  911. to_char
  912. ------------------------
  913. 0
  914. 0
  915. -34,338,492
  916. 4
  917. 7,799,461
  918. 16,397
  919. 93,902
  920. -83,028,485
  921. 74,881
  922. -24,926,804
  923. (10 rows)
  924. SELECT to_char(val, '9G999G999G999G999G999D999G999G999G999G999')
  925. FROM num_data;
  926. to_char
  927. --------------------------------------------
  928. .000,000,000,000,000
  929. .000,000,000,000,000
  930. -34,338,492.215,397,047,000,000
  931. 4.310,000,000,000,000
  932. 7,799,461.411,900,000,000,000
  933. 16,397.038,491,000,000,000
  934. 93,901.577,630,260,000,000
  935. -83,028,485.000,000,000,000,000
  936. 74,881.000,000,000,000,000
  937. -24,926,804.045,047,420,000,000
  938. (10 rows)
  939. SELECT to_char(val, '9999999999999999.999999999999999PR')
  940. FROM num_data;
  941. to_char
  942. ------------------------------------
  943. .000000000000000
  944. .000000000000000
  945. <34338492.215397047000000>
  946. 4.310000000000000
  947. 7799461.411900000000000
  948. 16397.038491000000000
  949. 93901.577630260000000
  950. <83028485.000000000000000>
  951. 74881.000000000000000
  952. <24926804.045047420000000>
  953. (10 rows)
  954. SELECT to_char(val, '9999999999999999.999999999999999S')
  955. FROM num_data;
  956. to_char
  957. -----------------------------------
  958. .000000000000000+
  959. .000000000000000+
  960. 34338492.215397047000000-
  961. 4.310000000000000+
  962. 7799461.411900000000000+
  963. 16397.038491000000000+
  964. 93901.577630260000000+
  965. 83028485.000000000000000-
  966. 74881.000000000000000+
  967. 24926804.045047420000000-
  968. (10 rows)
  969. SELECT to_char(val, 'MI9999999999999999.999999999999999') FROM num_data;
  970. to_char
  971. -----------------------------------
  972. .000000000000000
  973. .000000000000000
  974. - 34338492.215397047000000
  975. 4.310000000000000
  976. 7799461.411900000000000
  977. 16397.038491000000000
  978. 93901.577630260000000
  979. - 83028485.000000000000000
  980. 74881.000000000000000
  981. - 24926804.045047420000000
  982. (10 rows)
  983. SELECT to_char(val, 'FMS9999999999999999.999999999999999') FROM num_data;
  984. to_char
  985. ---------------------
  986. +0.
  987. +0.
  988. -34338492.215397047
  989. +4.31
  990. +7799461.4119
  991. +16397.038491
  992. +93901.57763026
  993. -83028485.
  994. +74881.
  995. -24926804.04504742
  996. (10 rows)
  997. SELECT to_char(val, 'FM9999999999999999.999999999999999THPR') FROM num_data;
  998. to_char
  999. ----------------------
  1000. 0.
  1001. 0.
  1002. <34338492.215397047>
  1003. 4.31
  1004. 7799461.4119
  1005. 16397.038491
  1006. 93901.57763026
  1007. <83028485.>
  1008. 74881.
  1009. <24926804.04504742>
  1010. (10 rows)
  1011. SELECT to_char(val, 'SG9999999999999999.999999999999999th') FROM num_data;
  1012. to_char
  1013. -----------------------------------
  1014. + .000000000000000
  1015. + .000000000000000
  1016. - 34338492.215397047000000
  1017. + 4.310000000000000
  1018. + 7799461.411900000000000
  1019. + 16397.038491000000000
  1020. + 93901.577630260000000
  1021. - 83028485.000000000000000
  1022. + 74881.000000000000000
  1023. - 24926804.045047420000000
  1024. (10 rows)
  1025. SELECT to_char(val, '0999999999999999.999999999999999') FROM num_data;
  1026. to_char
  1027. -----------------------------------
  1028. 0000000000000000.000000000000000
  1029. 0000000000000000.000000000000000
  1030. -0000000034338492.215397047000000
  1031. 0000000000000004.310000000000000
  1032. 0000000007799461.411900000000000
  1033. 0000000000016397.038491000000000
  1034. 0000000000093901.577630260000000
  1035. -0000000083028485.000000000000000
  1036. 0000000000074881.000000000000000
  1037. -0000000024926804.045047420000000
  1038. (10 rows)
  1039. SELECT to_char(val, 'S0999999999999999.999999999999999') FROM num_data;
  1040. to_char
  1041. -----------------------------------
  1042. +0000000000000000.000000000000000
  1043. +0000000000000000.000000000000000
  1044. -0000000034338492.215397047000000
  1045. +0000000000000004.310000000000000
  1046. +0000000007799461.411900000000000
  1047. +0000000000016397.038491000000000
  1048. +0000000000093901.577630260000000
  1049. -0000000083028485.000000000000000
  1050. +0000000000074881.000000000000000
  1051. -0000000024926804.045047420000000
  1052. (10 rows)
  1053. SELECT to_char(val, 'FM0999999999999999.999999999999999') FROM num_data;
  1054. to_char
  1055. -----------------------------
  1056. 0000000000000000.
  1057. 0000000000000000.
  1058. -0000000034338492.215397047
  1059. 0000000000000004.31
  1060. 0000000007799461.4119
  1061. 0000000000016397.038491
  1062. 0000000000093901.57763026
  1063. -0000000083028485.
  1064. 0000000000074881.
  1065. -0000000024926804.04504742
  1066. (10 rows)
  1067. SELECT to_char(val, 'FM9999999999999999.099999999999999') FROM num_data;
  1068. to_char
  1069. ---------------------
  1070. .0
  1071. .0
  1072. -34338492.215397047
  1073. 4.31
  1074. 7799461.4119
  1075. 16397.038491
  1076. 93901.57763026
  1077. -83028485.0
  1078. 74881.0
  1079. -24926804.04504742
  1080. (10 rows)
  1081. SELECT to_char(val, 'FM9999999999990999.990999999999999') FROM num_data;
  1082. to_char
  1083. ---------------------
  1084. 0000.000
  1085. 0000.000
  1086. -34338492.215397047
  1087. 0004.310
  1088. 7799461.4119
  1089. 16397.038491
  1090. 93901.57763026
  1091. -83028485.000
  1092. 74881.000
  1093. -24926804.04504742
  1094. (10 rows)
  1095. SELECT to_char(val, 'FM0999999999999999.999909999999999') FROM num_data;
  1096. to_char
  1097. -----------------------------
  1098. 0000000000000000.00000
  1099. 0000000000000000.00000
  1100. -0000000034338492.215397047
  1101. 0000000000000004.31000
  1102. 0000000007799461.41190
  1103. 0000000000016397.038491
  1104. 0000000000093901.57763026
  1105. -0000000083028485.00000
  1106. 0000000000074881.00000
  1107. -0000000024926804.04504742
  1108. (10 rows)
  1109. SELECT to_char(val, 'FM9999999990999999.099999999999999') FROM num_data;
  1110. to_char
  1111. ---------------------
  1112. 0000000.0
  1113. 0000000.0
  1114. -34338492.215397047
  1115. 0000004.31
  1116. 7799461.4119
  1117. 0016397.038491
  1118. 0093901.57763026
  1119. -83028485.0
  1120. 0074881.0
  1121. -24926804.04504742
  1122. (10 rows)
  1123. SELECT to_char(val, 'L9999999999999999.099999999999999') FROM num_data;
  1124. to_char
  1125. ------------------------------------
  1126. .000000000000000
  1127. .000000000000000
  1128. -34338492.215397047000000
  1129. 4.310000000000000
  1130. 7799461.411900000000000
  1131. 16397.038491000000000
  1132. 93901.577630260000000
  1133. -83028485.000000000000000
  1134. 74881.000000000000000
  1135. -24926804.045047420000000
  1136. (10 rows)
  1137. SELECT to_char(val, 'FM9999999999999999.99999999999999') FROM num_data;
  1138. to_char
  1139. ---------------------
  1140. 0.
  1141. 0.
  1142. -34338492.215397047
  1143. 4.31
  1144. 7799461.4119
  1145. 16397.038491
  1146. 93901.57763026
  1147. -83028485.
  1148. 74881.
  1149. -24926804.04504742
  1150. (10 rows)
  1151. SELECT to_char(val, 'S 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 . 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9') FROM num_data;
  1152. to_char
  1153. -----------------------------------------------------------------------
  1154. +. 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
  1155. +. 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
  1156. -3 4 3 3 8 4 9 2 . 2 1 5 3 9 7 0 4 7 0 0 0 0 0 0 0 0
  1157. +4 . 3 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
  1158. +7 7 9 9 4 6 1 . 4 1 1 9 0 0 0 0 0 0 0 0 0 0 0 0 0
  1159. +1 6 3 9 7 . 0 3 8 4 9 1 0 0 0 0 0 0 0 0 0 0 0
  1160. +9 3 9 0 1 . 5 7 7 6 3 0 2 6 0 0 0 0 0 0 0 0 0
  1161. -8 3 0 2 8 4 8 5 . 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
  1162. +7 4 8 8 1 . 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
  1163. -2 4 9 2 6 8 0 4 . 0 4 5 0 4 7 4 2 0 0 0 0 0 0 0 0 0
  1164. (10 rows)
  1165. SELECT to_char(val, 'FMS 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 . 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9') FROM num_data;
  1166. to_char
  1167. -------------------------------------------------------
  1168. +0 .
  1169. +0 .
  1170. -3 4 3 3 8 4 9 2 . 2 1 5 3 9 7 0 4 7
  1171. +4 . 3 1
  1172. +7 7 9 9 4 6 1 . 4 1 1 9
  1173. +1 6 3 9 7 . 0 3 8 4 9 1
  1174. +9 3 9 0 1 . 5 7 7 6 3 0 2 6
  1175. -8 3 0 2 8 4 8 5 .
  1176. +7 4 8 8 1 .
  1177. -2 4 9 2 6 8 0 4 . 0 4 5 0 4 7 4 2
  1178. (10 rows)
  1179. SELECT to_char(val, E'99999 "text" 9999 "9999" 999 "\\"text between quote marks\\"" 9999') FROM num_data;
  1180. to_char
  1181. -----------------------------------------------------------
  1182. text 9999 "text between quote marks" 0
  1183. text 9999 "text between quote marks" 0
  1184. text -3 9999 433 "text between quote marks" 8492
  1185. text 9999 "text between quote marks" 4
  1186. text 9999 779 "text between quote marks" 9461
  1187. text 9999 1 "text between quote marks" 6397
  1188. text 9999 9 "text between quote marks" 3902
  1189. text -8 9999 302 "text between quote marks" 8485
  1190. text 9999 7 "text between quote marks" 4881
  1191. text -2 9999 492 "text between quote marks" 6804
  1192. (10 rows)
  1193. SELECT to_char(val, '999999SG9999999999') FROM num_data;
  1194. to_char
  1195. -------------------
  1196. + 0
  1197. + 0
  1198. - 34338492
  1199. + 4
  1200. + 7799461
  1201. + 16397
  1202. + 93902
  1203. - 83028485
  1204. + 74881
  1205. - 24926804
  1206. (10 rows)
  1207. SELECT to_char(val, 'FM9999999999999999.999999999999999') FROM num_data;
  1208. to_char
  1209. ---------------------
  1210. 0.
  1211. 0.
  1212. -34338492.215397047
  1213. 4.31
  1214. 7799461.4119
  1215. 16397.038491
  1216. 93901.57763026
  1217. -83028485.
  1218. 74881.
  1219. -24926804.04504742
  1220. (10 rows)
  1221. SELECT to_char(val, '9.999EEEE') FROM num_data;
  1222. to_char
  1223. ------------
  1224. 0.000e+00
  1225. 0.000e+00
  1226. -3.434e+07
  1227. 4.310e+00
  1228. 7.799e+06
  1229. 1.640e+04
  1230. 9.390e+04
  1231. -8.303e+07
  1232. 7.488e+04
  1233. -2.493e+07
  1234. (10 rows)
  1235. SELECT to_char('100'::numeric, 'FM999.9');
  1236. to_char
  1237. ---------
  1238. 100.
  1239. (1 row)
  1240. SELECT to_char('100'::numeric, 'FM999.');
  1241. to_char
  1242. ---------
  1243. 100
  1244. (1 row)
  1245. SELECT to_char('100'::numeric, 'FM999');
  1246. to_char
  1247. ---------
  1248. 100
  1249. (1 row)
  1250. -- Check parsing of literal text in a format string
  1251. SELECT to_char('100'::numeric, 'foo999');
  1252. to_char
  1253. ---------
  1254. foo 100
  1255. (1 row)
  1256. SELECT to_char('100'::numeric, 'f\oo999');
  1257. to_char
  1258. ----------
  1259. f\oo 100
  1260. (1 row)
  1261. SELECT to_char('100'::numeric, 'f\\oo999');
  1262. to_char
  1263. -----------
  1264. f\\oo 100
  1265. (1 row)
  1266. SELECT to_char('100'::numeric, 'f\"oo999');
  1267. to_char
  1268. ----------
  1269. f"oo 100
  1270. (1 row)
  1271. SELECT to_char('100'::numeric, 'f\\"oo999');
  1272. to_char
  1273. -----------
  1274. f\"oo 100
  1275. (1 row)
  1276. SELECT to_char('100'::numeric, 'f"ool"999');
  1277. to_char
  1278. ----------
  1279. fool 100
  1280. (1 row)
  1281. SELECT to_char('100'::numeric, 'f"\ool"999');
  1282. to_char
  1283. ----------
  1284. fool 100
  1285. (1 row)
  1286. SELECT to_char('100'::numeric, 'f"\\ool"999');
  1287. to_char
  1288. -----------
  1289. f\ool 100
  1290. (1 row)
  1291. SELECT to_char('100'::numeric, 'f"ool\"999');
  1292. to_char
  1293. ----------
  1294. fool"999
  1295. (1 row)
  1296. SELECT to_char('100'::numeric, 'f"ool\\"999');
  1297. to_char
  1298. -----------
  1299. fool\ 100
  1300. (1 row)
  1301. SELECT to_number('-34,338,492', '99G999G999');
  1302. to_number
  1303. -----------
  1304. -34338492
  1305. (1 row)
  1306. SELECT to_number('-34,338,492.654,878', '99G999G999D999G999');
  1307. to_number
  1308. ------------------
  1309. -34338492.654878
  1310. (1 row)
  1311. SELECT to_number('<564646.654564>', '999999.999999PR');
  1312. to_number
  1313. ----------------
  1314. -564646.654564
  1315. (1 row)
  1316. SELECT to_number('0.00001-', '9.999999S');
  1317. to_number
  1318. -----------
  1319. -0.00001
  1320. (1 row)
  1321. SELECT to_number('5.01-', 'FM9.999999S');
  1322. to_number
  1323. -----------
  1324. -5.01
  1325. (1 row)
  1326. SELECT to_number('5.01-', 'FM9.999999MI');
  1327. to_number
  1328. -----------
  1329. -5.01
  1330. (1 row)
  1331. SELECT to_number('5 4 4 4 4 8 . 7 8', '9 9 9 9 9 9 . 9 9');
  1332. to_number
  1333. -----------
  1334. 544448.78
  1335. (1 row)
  1336. SELECT to_number('.01', 'FM9.99');
  1337. to_number
  1338. -----------
  1339. 0.01
  1340. (1 row)
  1341. SELECT to_number('.0', '99999999.99999999');
  1342. to_number
  1343. -----------
  1344. 0.0
  1345. (1 row)
  1346. SELECT to_number('.-01', 'S99.99');
  1347. to_number
  1348. -----------
  1349. -0.01
  1350. (1 row)
  1351. SELECT to_number('.01-', '99.99S');
  1352. to_number
  1353. -----------
  1354. -0.01
  1355. (1 row)
  1356. SELECT to_number(' . 0 1-', ' 9 9 . 9 9 S');
  1357. to_number
  1358. -----------
  1359. -0.01
  1360. (1 row)
  1361. SELECT to_number('34,50','999,99');
  1362. to_number
  1363. -----------
  1364. 3450
  1365. (1 row)
  1366. SELECT to_number('123,000','999G');
  1367. to_number
  1368. -----------
  1369. 123
  1370. (1 row)
  1371. SELECT to_number('123456','999G999');
  1372. to_number
  1373. -----------
  1374. 123456
  1375. (1 row)
  1376. SELECT to_number('$1234.56','L9,999.99');
  1377. to_number
  1378. -----------
  1379. 1234.56
  1380. (1 row)
  1381. SELECT to_number('$1234.56','L99,999.99');
  1382. to_number
  1383. -----------
  1384. 1234.56
  1385. (1 row)
  1386. SELECT to_number('$1,234.56','L99,999.99');
  1387. to_number
  1388. -----------
  1389. 1234.56
  1390. (1 row)
  1391. SELECT to_number('1234.56','L99,999.99');
  1392. to_number
  1393. -----------
  1394. 1234.56
  1395. (1 row)
  1396. SELECT to_number('1,234.56','L99,999.99');
  1397. to_number
  1398. -----------
  1399. 1234.56
  1400. (1 row)
  1401. SELECT to_number('42nd', '99th');
  1402. to_number
  1403. -----------
  1404. 42
  1405. (1 row)
  1406. --
  1407. -- Input syntax
  1408. --
  1409. CREATE TABLE num_input_test (n1 numeric);
  1410. -- good inputs
  1411. INSERT INTO num_input_test(n1) VALUES (' 123');
  1412. INSERT INTO num_input_test(n1) VALUES (' 3245874 ');
  1413. INSERT INTO num_input_test(n1) VALUES (' -93853');
  1414. INSERT INTO num_input_test(n1) VALUES ('555.50');
  1415. INSERT INTO num_input_test(n1) VALUES ('-555.50');
  1416. INSERT INTO num_input_test(n1) VALUES ('NaN ');
  1417. INSERT INTO num_input_test(n1) VALUES (' nan');
  1418. INSERT INTO num_input_test(n1) VALUES (' inf ');
  1419. INSERT INTO num_input_test(n1) VALUES (' +inf ');
  1420. INSERT INTO num_input_test(n1) VALUES (' -inf ');
  1421. INSERT INTO num_input_test(n1) VALUES (' Infinity ');
  1422. INSERT INTO num_input_test(n1) VALUES (' +inFinity ');
  1423. INSERT INTO num_input_test(n1) VALUES (' -INFINITY ');
  1424. -- bad inputs
  1425. INSERT INTO num_input_test(n1) VALUES (' ');
  1426. ERROR: invalid input syntax for type numeric: " "
  1427. LINE 1: INSERT INTO num_input_test(n1) VALUES (' ');
  1428. ^
  1429. INSERT INTO num_input_test(n1) VALUES (' 1234 %');
  1430. ERROR: invalid input syntax for type numeric: " 1234 %"
  1431. LINE 1: INSERT INTO num_input_test(n1) VALUES (' 1234 %');
  1432. ^
  1433. INSERT INTO num_input_test(n1) VALUES ('xyz');
  1434. ERROR: invalid input syntax for type numeric: "xyz"
  1435. LINE 1: INSERT INTO num_input_test(n1) VALUES ('xyz');
  1436. ^
  1437. INSERT INTO num_input_test(n1) VALUES ('- 1234');
  1438. ERROR: invalid input syntax for type numeric: "- 1234"
  1439. LINE 1: INSERT INTO num_input_test(n1) VALUES ('- 1234');
  1440. ^
  1441. INSERT INTO num_input_test(n1) VALUES ('5 . 0');
  1442. ERROR: invalid input syntax for type numeric: "5 . 0"
  1443. LINE 1: INSERT INTO num_input_test(n1) VALUES ('5 . 0');
  1444. ^
  1445. INSERT INTO num_input_test(n1) VALUES ('5. 0 ');
  1446. ERROR: invalid input syntax for type numeric: "5. 0 "
  1447. LINE 1: INSERT INTO num_input_test(n1) VALUES ('5. 0 ');
  1448. ^
  1449. INSERT INTO num_input_test(n1) VALUES ('');
  1450. ERROR: invalid input syntax for type numeric: ""
  1451. LINE 1: INSERT INTO num_input_test(n1) VALUES ('');
  1452. ^
  1453. INSERT INTO num_input_test(n1) VALUES (' N aN ');
  1454. ERROR: invalid input syntax for type numeric: " N aN "
  1455. LINE 1: INSERT INTO num_input_test(n1) VALUES (' N aN ');
  1456. ^
  1457. INSERT INTO num_input_test(n1) VALUES ('+ infinity');
  1458. ERROR: invalid input syntax for type numeric: "+ infinity"
  1459. LINE 1: INSERT INTO num_input_test(n1) VALUES ('+ infinity');
  1460. ^
  1461. SELECT * FROM num_input_test;
  1462. n1
  1463. -----------
  1464. 123
  1465. 3245874
  1466. -93853
  1467. 555.50
  1468. -555.50
  1469. NaN
  1470. NaN
  1471. Infinity
  1472. Infinity
  1473. -Infinity
  1474. Infinity
  1475. Infinity
  1476. -Infinity
  1477. (13 rows)
  1478. select trim_scale((0.1 - 2e-16383) * (0.1 - 3e-16383));
  1479. trim_scale
  1480. ------------
  1481. 0.01
  1482. (1 row)
  1483. --
  1484. -- Test some corner cases for division
  1485. --
  1486. select 999999999999999999999::numeric/1000000000000000000000;
  1487. ?column?
  1488. ------------------------
  1489. 1.00000000000000000000
  1490. (1 row)
  1491. select mod(999999999999999999999::numeric,1000000000000000000000);
  1492. mod
  1493. -----------------------
  1494. 999999999999999999999
  1495. (1 row)
  1496. select div(-9999999999999999999999::numeric,1000000000000000000000);
  1497. div
  1498. -----
  1499. -9
  1500. (1 row)
  1501. select mod(-9999999999999999999999::numeric,1000000000000000000000);
  1502. mod
  1503. ------------------------
  1504. -999999999999999999999
  1505. (1 row)
  1506. select div(-9999999999999999999999::numeric,1000000000000000000000)*1000000000000000000000 + mod(-9999999999999999999999::numeric,1000000000000000000000);
  1507. ?column?
  1508. -------------------------
  1509. -9999999999999999999999
  1510. (1 row)
  1511. select mod (70.0,70) ;
  1512. mod
  1513. -----
  1514. 0.0
  1515. (1 row)
  1516. select div (70.0,70) ;
  1517. div
  1518. -----
  1519. 1
  1520. (1 row)
  1521. select 70.0 / 70 ;
  1522. ?column?
  1523. ------------------------
  1524. 1.00000000000000000000
  1525. (1 row)
  1526. select 12345678901234567890 % 123;
  1527. ?column?
  1528. ----------
  1529. 78
  1530. (1 row)
  1531. select 12345678901234567890 / 123;
  1532. ?column?
  1533. --------------------
  1534. 100371373180768845
  1535. (1 row)
  1536. select div(12345678901234567890, 123);
  1537. div
  1538. --------------------
  1539. 100371373180768844
  1540. (1 row)
  1541. select div(12345678901234567890, 123) * 123 + 12345678901234567890 % 123;
  1542. ?column?
  1543. ----------------------
  1544. 12345678901234567890
  1545. (1 row)
  1546. --
  1547. -- Test some corner cases for square root
  1548. --
  1549. select sqrt(1.000000000000003::numeric);
  1550. sqrt
  1551. -------------------
  1552. 1.000000000000001
  1553. (1 row)
  1554. select sqrt(1.000000000000004::numeric);
  1555. sqrt
  1556. -------------------
  1557. 1.000000000000002
  1558. (1 row)
  1559. select sqrt(96627521408608.56340355805::numeric);
  1560. sqrt
  1561. ---------------------
  1562. 9829929.87811248648
  1563. (1 row)
  1564. select sqrt(96627521408608.56340355806::numeric);
  1565. sqrt
  1566. ---------------------
  1567. 9829929.87811248649
  1568. (1 row)
  1569. select sqrt(515549506212297735.073688290367::numeric);
  1570. sqrt
  1571. ------------------------
  1572. 718017761.766585921184
  1573. (1 row)
  1574. select sqrt(515549506212297735.073688290368::numeric);
  1575. sqrt
  1576. ------------------------
  1577. 718017761.766585921185
  1578. (1 row)
  1579. select sqrt(8015491789940783531003294973900306::numeric);
  1580. sqrt
  1581. -------------------
  1582. 89529278953540017
  1583. (1 row)
  1584. select sqrt(8015491789940783531003294973900307::numeric);
  1585. sqrt
  1586. -------------------
  1587. 89529278953540018
  1588. (1 row)
  1589. --
  1590. -- Test code path for raising to integer powers
  1591. --
  1592. select 10.0 ^ -2147483648 as rounds_to_zero;
  1593. rounds_to_zero
  1594. --------------------
  1595. 0.0000000000000000
  1596. (1 row)
  1597. select 10.0 ^ -2147483647 as rounds_to_zero;
  1598. rounds_to_zero
  1599. --------------------
  1600. 0.0000000000000000
  1601. (1 row)
  1602. select 10.0 ^ 2147483647 as overflows;
  1603. ERROR: value overflows numeric format
  1604. select 117743296169.0 ^ 1000000000 as overflows;
  1605. ERROR: value overflows numeric format
  1606. -- cases that used to return inaccurate results
  1607. select 3.789 ^ 21;
  1608. ?column?
  1609. --------------------------------
  1610. 1409343026052.8716016316022141
  1611. (1 row)
  1612. select 3.789 ^ 35;
  1613. ?column?
  1614. ----------------------------------------
  1615. 177158169650516670809.3820586142670135
  1616. (1 row)
  1617. select 1.2 ^ 345;
  1618. ?column?
  1619. -----------------------------------------------
  1620. 2077446682327378559843444695.5827049735727869
  1621. (1 row)
  1622. select 0.12 ^ (-20);
  1623. ?column?
  1624. --------------------------------------
  1625. 2608405330458882702.5529619561355838
  1626. (1 row)
  1627. select 1.000000000123 ^ (-2147483648);
  1628. ?column?
  1629. --------------------
  1630. 0.7678656556403084
  1631. (1 row)
  1632. -- cases that used to error out
  1633. select 0.12 ^ (-25);
  1634. ?column?
  1635. -------------------------------------------
  1636. 104825960103961013959336.4983657883169110
  1637. (1 row)
  1638. select 0.5678 ^ (-85);
  1639. ?column?
  1640. ----------------------------------------
  1641. 782333637740774446257.7719390061997396
  1642. (1 row)
  1643. -- negative base to integer powers
  1644. select (-1.0) ^ 2147483646;
  1645. ?column?
  1646. --------------------
  1647. 1.0000000000000000
  1648. (1 row)
  1649. select (-1.0) ^ 2147483647;
  1650. ?column?
  1651. ---------------------
  1652. -1.0000000000000000
  1653. (1 row)
  1654. select (-1.0) ^ 2147483648;
  1655. ?column?
  1656. --------------------
  1657. 1.0000000000000000
  1658. (1 row)
  1659. select (-1.0) ^ 1000000000000000;
  1660. ?column?
  1661. --------------------
  1662. 1.0000000000000000
  1663. (1 row)
  1664. select (-1.0) ^ 1000000000000001;
  1665. ?column?
  1666. ---------------------
  1667. -1.0000000000000000
  1668. (1 row)
  1669. --
  1670. -- Tests for raising to non-integer powers
  1671. --
  1672. -- special cases
  1673. select 0.0 ^ 0.0;
  1674. ?column?
  1675. --------------------
  1676. 1.0000000000000000
  1677. (1 row)
  1678. select (-12.34) ^ 0.0;
  1679. ?column?
  1680. --------------------
  1681. 1.0000000000000000
  1682. (1 row)
  1683. select 12.34 ^ 0.0;
  1684. ?column?
  1685. --------------------
  1686. 1.0000000000000000
  1687. (1 row)
  1688. select 0.0 ^ 12.34;
  1689. ?column?
  1690. --------------------
  1691. 0.0000000000000000
  1692. (1 row)
  1693. -- NaNs
  1694. select 'NaN'::numeric ^ 'NaN'::numeric;
  1695. ?column?
  1696. ----------
  1697. NaN
  1698. (1 row)
  1699. select 'NaN'::numeric ^ 0;
  1700. ?column?
  1701. ----------
  1702. 1
  1703. (1 row)
  1704. select 'NaN'::numeric ^ 1;
  1705. ?column?
  1706. ----------
  1707. NaN
  1708. (1 row)
  1709. select 0 ^ 'NaN'::numeric;
  1710. ?column?
  1711. ----------
  1712. NaN
  1713. (1 row)
  1714. select 1 ^ 'NaN'::numeric;
  1715. ?column?
  1716. ----------
  1717. 1
  1718. (1 row)
  1719. -- invalid inputs
  1720. select 0.0 ^ (-12.34);
  1721. ERROR: zero raised to a negative power is undefined
  1722. select (-12.34) ^ 1.2;
  1723. ERROR: a negative number raised to a non-integer power yields a complex result
  1724. -- cases that used to generate inaccurate results
  1725. select 32.1 ^ 9.8;
  1726. ?column?
  1727. --------------------
  1728. 580429286790711.10
  1729. (1 row)
  1730. select 32.1 ^ (-9.8);
  1731. ?column?
  1732. ----------------------------------
  1733. 0.000000000000001722862754788209
  1734. (1 row)
  1735. select 12.3 ^ 45.6;
  1736. ?column?
  1737. ------------------------------------------------------
  1738. 50081010321492803393171165777624533697036806969694.9
  1739. (1 row)
  1740. select 12.3 ^ (-45.6);
  1741. ?column?
  1742. ---------------------------------------------------------------------
  1743. 0.00000000000000000000000000000000000000000000000001996764828785491
  1744. (1 row)
  1745. --
  1746. -- Tests for EXP()
  1747. --
  1748. -- special cases
  1749. select exp(0.0);
  1750. exp
  1751. --------------------
  1752. 1.0000000000000000
  1753. (1 row)
  1754. select exp(1.0);
  1755. exp
  1756. --------------------
  1757. 2.7182818284590452
  1758. (1 row)
  1759. select exp(1.0::numeric(71,70));
  1760. exp
  1761. --------------------------------------------------------------------------
  1762. 2.7182818284590452353602874713526624977572470936999595749669676277240766
  1763. (1 row)
  1764. select exp('nan'::numeric);
  1765. exp
  1766. -----
  1767. NaN
  1768. (1 row)
  1769. select exp('inf'::numeric);
  1770. exp
  1771. ----------
  1772. Infinity
  1773. (1 row)
  1774. -- cases that used to generate inaccurate results
  1775. select exp(32.999);
  1776. exp
  1777. ---------------------
  1778. 214429043492155.053
  1779. (1 row)
  1780. select exp(-32.999);
  1781. exp
  1782. ----------------------------------
  1783. 0.000000000000004663547361468248
  1784. (1 row)
  1785. select exp(123.456);
  1786. exp
  1787. ------------------------------------------------------------
  1788. 413294435277809344957685441227343146614594393746575438.725
  1789. (1 row)
  1790. select exp(-123.456);
  1791. exp
  1792. -------------------------------------------------------------------------
  1793. 0.000000000000000000000000000000000000000000000000000002419582541264601
  1794. (1 row)
  1795. -- big test
  1796. select exp(1234.5678);
  1797. exp
  1798. ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
  1799. 146549072930959479983482138503979804217622199675223653966270157446954995433819741094410764947112047906012815540251009949604426069672532417736057033099274204598385314594846509975629046864798765888104789074984927709616261452461385220475510438783429612447831614003668421849727379202555580791042606170523016207262965336641214601082882495255771621327088265411334088968112458492660609809762865582162764292604697957813514621259353683899630997077707406305730694385703091201347848855199354307506425820147289848677003277208302716466011827836279231.9667
  1800. (1 row)
  1801. --
  1802. -- Tests for generate_series
  1803. --
  1804. select * from generate_series(0.0::numeric, 4.0::numeric);
  1805. generate_series
  1806. -----------------
  1807. 0.0
  1808. 1.0
  1809. 2.0
  1810. 3.0
  1811. 4.0
  1812. (5 rows)
  1813. select * from generate_series(0.1::numeric, 4.0::numeric, 1.3::numeric);
  1814. generate_series
  1815. -----------------
  1816. 0.1
  1817. 1.4
  1818. 2.7
  1819. 4.0
  1820. (4 rows)
  1821. select * from generate_series(4.0::numeric, -1.5::numeric, -2.2::numeric);
  1822. generate_series
  1823. -----------------
  1824. 4.0
  1825. 1.8
  1826. -0.4
  1827. (3 rows)
  1828. -- Trigger errors
  1829. select * from generate_series(-100::numeric, 100::numeric, 0::numeric);
  1830. ERROR: step size cannot equal zero
  1831. select * from generate_series(-100::numeric, 100::numeric, 'nan'::numeric);
  1832. ERROR: step size cannot be NaN
  1833. select * from generate_series('nan'::numeric, 100::numeric, 10::numeric);
  1834. ERROR: start value cannot be NaN
  1835. select * from generate_series(0::numeric, 'nan'::numeric, 10::numeric);
  1836. ERROR: stop value cannot be NaN
  1837. select * from generate_series('inf'::numeric, 'inf'::numeric, 10::numeric);
  1838. ERROR: start value cannot be infinity
  1839. select * from generate_series(0::numeric, 'inf'::numeric, 10::numeric);
  1840. ERROR: stop value cannot be infinity
  1841. select * from generate_series(0::numeric, '42'::numeric, '-inf'::numeric);
  1842. ERROR: step size cannot be infinity
  1843. -- Checks maximum, output is truncated
  1844. select (i / (10::numeric ^ 131071))::numeric(1,0)
  1845. from generate_series(6 * (10::numeric ^ 131071),
  1846. 9 * (10::numeric ^ 131071),
  1847. 10::numeric ^ 131071) as a(i);
  1848. numeric
  1849. ---------
  1850. 6
  1851. 7
  1852. 8
  1853. 9
  1854. (4 rows)
  1855. --
  1856. -- Tests for LN()
  1857. --
  1858. -- Invalid inputs
  1859. select ln(-12.34);
  1860. ERROR: cannot take logarithm of a negative number
  1861. select ln(0.0);
  1862. ERROR: cannot take logarithm of zero
  1863. -- Some random tests
  1864. select ln(1.2345678e-28);
  1865. ln
  1866. -----------------------------------------
  1867. -64.26166165451762991204894255882820859
  1868. (1 row)
  1869. select ln(0.0456789);
  1870. ln
  1871. ---------------------
  1872. -3.0861187944847439
  1873. (1 row)
  1874. select ln(0.349873948359354029493948309745709580730482050975);
  1875. ln
  1876. -----------------------------------------------------
  1877. -1.050182336912082775693991697979750253056317885460
  1878. (1 row)
  1879. select ln(0.99949452);
  1880. ln
  1881. -------------------------
  1882. -0.00050560779808326467
  1883. (1 row)
  1884. select ln(1.00049687395);
  1885. ln
  1886. ------------------------
  1887. 0.00049675054901370394
  1888. (1 row)
  1889. select ln(1234.567890123456789);
  1890. ln
  1891. --------------------
  1892. 7.1184763012977896
  1893. (1 row)
  1894. select ln(5.80397490724e5);
  1895. ln
  1896. --------------------
  1897. 13.271468476626518
  1898. (1 row)
  1899. select ln(9.342536355e34);
  1900. ln
  1901. --------------------
  1902. 80.522470935524187
  1903. (1 row)
  1904. --
  1905. -- Tests for LOG() (base 10)
  1906. --
  1907. -- invalid inputs
  1908. select log(-12.34);
  1909. ERROR: cannot take logarithm of a negative number
  1910. CONTEXT: SQL function "log" statement 1
  1911. select log(0.0);
  1912. ERROR: cannot take logarithm of zero
  1913. CONTEXT: SQL function "log" statement 1
  1914. --
  1915. -- Tests for LOG() (arbitrary base)
  1916. --
  1917. -- invalid inputs
  1918. select log(-12.34, 56.78);
  1919. ERROR: cannot take logarithm of a negative number
  1920. select log(-12.34, -56.78);
  1921. ERROR: cannot take logarithm of a negative number
  1922. select log(12.34, -56.78);
  1923. ERROR: cannot take logarithm of a negative number
  1924. select log(0.0, 12.34);
  1925. ERROR: cannot take logarithm of zero
  1926. select log(12.34, 0.0);
  1927. ERROR: cannot take logarithm of zero
  1928. select log(1.0, 12.34);
  1929. ERROR: division by zero
  1930. -- some random tests
  1931. select log(1.23e-89, 6.4689e45);
  1932. log
  1933. ------------------------------------------------------------------------------------------------
  1934. -0.5152489207781856983977054971756484879653568168479201885425588841094788842469115325262329756
  1935. (1 row)
  1936. select log(0.99923, 4.58934e34);
  1937. log
  1938. ---------------------
  1939. -103611.55579544132
  1940. (1 row)
  1941. select log(1.000016, 8.452010e18);
  1942. log
  1943. --------------------
  1944. 2723830.2877097365
  1945. (1 row)
  1946. select log(3.1954752e47, 9.4792021e-73);
  1947. log
  1948. -------------------------------------------------------------------------------------
  1949. -1.51613372350688302142917386143459361608600157692779164475351842333265418126982165
  1950. (1 row)
  1951. --
  1952. -- Tests for scale()
  1953. --
  1954. select scale(numeric 'NaN');
  1955. scale
  1956. -------
  1957. (1 row)
  1958. select scale(numeric 'inf');
  1959. scale
  1960. -------
  1961. (1 row)
  1962. select scale(NULL::numeric);
  1963. scale
  1964. -------
  1965. (1 row)
  1966. select scale(1.12);
  1967. scale
  1968. -------
  1969. 2
  1970. (1 row)
  1971. select scale(0);
  1972. scale
  1973. -------
  1974. 0
  1975. (1 row)
  1976. select scale(0.00);
  1977. scale
  1978. -------
  1979. 2
  1980. (1 row)
  1981. select scale(1.12345);
  1982. scale
  1983. -------
  1984. 5
  1985. (1 row)
  1986. select scale(110123.12475871856128);
  1987. scale
  1988. -------
  1989. 14
  1990. (1 row)
  1991. select scale(-1123.12471856128);
  1992. scale
  1993. -------
  1994. 11
  1995. (1 row)
  1996. select scale(-13.000000000000000);
  1997. scale
  1998. -------
  1999. 15
  2000. (1 row)
  2001. --
  2002. -- Tests for min_scale()
  2003. --
  2004. select min_scale(numeric 'NaN') is NULL; -- should be true
  2005. ?column?
  2006. ----------
  2007. t
  2008. (1 row)
  2009. select min_scale(numeric 'inf') is NULL; -- should be true
  2010. ?column?
  2011. ----------
  2012. t
  2013. (1 row)
  2014. select min_scale(0); -- no digits
  2015. min_scale
  2016. -----------
  2017. 0
  2018. (1 row)
  2019. select min_scale(0.00); -- no digits again
  2020. min_scale
  2021. -----------
  2022. 0
  2023. (1 row)
  2024. select min_scale(1.0); -- no scale
  2025. min_scale
  2026. -----------
  2027. 0
  2028. (1 row)
  2029. select min_scale(1.1); -- scale 1
  2030. min_scale
  2031. -----------
  2032. 1
  2033. (1 row)
  2034. select min_scale(1.12); -- scale 2
  2035. min_scale
  2036. -----------
  2037. 2
  2038. (1 row)
  2039. select min_scale(1.123); -- scale 3
  2040. min_scale
  2041. -----------
  2042. 3
  2043. (1 row)
  2044. select min_scale(1.1234); -- scale 4, filled digit
  2045. min_scale
  2046. -----------
  2047. 4
  2048. (1 row)
  2049. select min_scale(1.12345); -- scale 5, 2 NDIGITS
  2050. min_scale
  2051. -----------
  2052. 5
  2053. (1 row)
  2054. select min_scale(1.1000); -- 1 pos in NDIGITS
  2055. min_scale
  2056. -----------
  2057. 1
  2058. (1 row)
  2059. select min_scale(1e100); -- very big number
  2060. min_scale
  2061. -----------
  2062. 0
  2063. (1 row)
  2064. --
  2065. -- Tests for trim_scale()
  2066. --
  2067. select trim_scale(numeric 'NaN');
  2068. trim_scale
  2069. ------------
  2070. NaN
  2071. (1 row)
  2072. select trim_scale(numeric 'inf');
  2073. trim_scale
  2074. ------------
  2075. Infinity
  2076. (1 row)
  2077. select trim_scale(1.120);
  2078. trim_scale
  2079. ------------
  2080. 1.12
  2081. (1 row)
  2082. select trim_scale(1.1234500);
  2083. trim_scale
  2084. ------------
  2085. 1.12345
  2086. (1 row)
  2087. select trim_scale(110123.12475871856128000);
  2088. trim_scale
  2089. -----------------------
  2090. 110123.12475871856128
  2091. (1 row)
  2092. select trim_scale(-1123.124718561280000000);
  2093. trim_scale
  2094. -------------------
  2095. -1123.12471856128
  2096. (1 row)
  2097. select trim_scale(-13.00000000000000000000);
  2098. trim_scale
  2099. ------------
  2100. -13
  2101. (1 row)
  2102. select trim_scale(1e100);
  2103. trim_scale
  2104. -------------------------------------------------------------------------------------------------------
  2105. 10000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
  2106. (1 row)
  2107. --
  2108. -- Tests for SUM()
  2109. --
  2110. -- cases that need carry propagation
  2111. SELECT SUM(9999::numeric) FROM generate_series(1, 100000);
  2112. sum
  2113. -----------
  2114. 999900000
  2115. (1 row)
  2116. SELECT SUM((-9999)::numeric) FROM generate_series(1, 100000);
  2117. sum
  2118. ------------
  2119. -999900000
  2120. (1 row)
  2121. SELECT lcm(9999 * (10::numeric)^131068 + (10::numeric^131068 - 1), 2); -- overflow
  2122. ERROR: value overflows numeric format
  2123. --
  2124. -- Tests for factorial
  2125. --
  2126. SELECT factorial(4);
  2127. factorial
  2128. -----------
  2129. 24
  2130. (1 row)
  2131. SELECT factorial(15);
  2132. factorial
  2133. ---------------
  2134. 1307674368000
  2135. (1 row)
  2136. SELECT factorial(100000);
  2137. ERROR: value overflows numeric format
  2138. SELECT factorial(0);
  2139. factorial
  2140. -----------
  2141. 1
  2142. (1 row)
  2143. SELECT factorial(-4);
  2144. ERROR: factorial of a negative number is undefined
  2145. --
  2146. -- Tests for pg_lsn()
  2147. --
  2148. SELECT pg_lsn(23783416::numeric);
  2149. pg_lsn
  2150. -----------
  2151. 0/16AE7F8
  2152. (1 row)
  2153. SELECT pg_lsn(0::numeric);
  2154. pg_lsn
  2155. --------
  2156. 0/0
  2157. (1 row)
  2158. SELECT pg_lsn(18446744073709551615::numeric);
  2159. pg_lsn
  2160. -------------------
  2161. FFFFFFFF/FFFFFFFF
  2162. (1 row)
  2163. SELECT pg_lsn(-1::numeric);
  2164. ERROR: pg_lsn out of range
  2165. SELECT pg_lsn(18446744073709551616::numeric);
  2166. ERROR: pg_lsn out of range
  2167. SELECT pg_lsn('NaN'::numeric);
  2168. ERROR: cannot convert NaN to pg_lsn