on 2019 Sep 16 12:02 PM
As the power function is in SQL Anywhere 17.0.10.5866 defined only for the double data type, I wrote a new power function only for integers called power_int:
create or replace function power_int( @int decimal(127,0), @j decimal (127,0) ) returns decimal(127,0) as begin declare @i decimal (127,0) declare @a decimal (127,0) if @j=0.0 set @int=1.0 set @i=1.0 set @a=@int while @i<=@j-1.0 begin set @int=@int*@a set @i=@i+1.0 end return @int end;
The function generates for smaller results correct values. If the result has more the 33 digits it becomes wrong:
select power_int (16,27) --324518553658426726783156020576200 --wrong result --324518553658426726783156020576256 --correct select power_int (2,107) --162259276829213363391578010288100 --wrong result --162259276829213363391578010288128 --correct
While power_int (16,26) and (2,106) gave the correct result. In ASE 16.0.x the function works fine if instead of decimal(127,0) decimal(38,0) will be used.
Many thanks
Robert
Request clarification before answering.
set option PUBLIC.precision = 120; and retry
You must be a registered user to add a comment. If you've already registered, sign in. Otherwise, register and sign in.
User | Count |
---|---|
74 | |
20 | |
9 | |
8 | |
7 | |
5 | |
5 | |
4 | |
4 | |
3 |
You must be a registered user to add a comment. If you've already registered, sign in. Otherwise, register and sign in.