Code covered by the BSD License  

Highlights from
slatec

from slatec by Ben Barrowes
The slatec library converted into matlab functions.

[x,ix,ierror]=dxadj(x,ix,ierror);
function [x,ix,ierror]=dxadj(x,ix,ierror);
%***BEGIN PROLOGUE  DXADJ
%***PURPOSE  To provide double-precision floating-point arithmetic
%            with an extended exponent range.
%***LIBRARY   SLATEC
%***CATEGORY  A3D
%***TYPE      doubleprecision (XADJ-S, DXADJ-D)
%***KEYWORDS  EXTENDED-RANGE DOUBLE-PRECISION ARITHMETIC
%***AUTHOR  Lozier, Daniel W., (National Bureau of Standards)
%           Smith, John M., (NBS and George Mason University)
%***DESCRIPTION
%     doubleprecision X
%     INTEGER IX
%
%                  TRANSFORMS (X,IX) SO THAT
%                  RADIX**(-L) .LE. ABS(X) .LT. RADIX**L.
%                  ON MOST COMPUTERS THIS TRANSFORMATION DOES
%                  NOT CHANGE THE MANTISSA OF X PROVIDED RADIX IS
%                  THE NUMBER BASE OF DOUBLE-PRECISION ARITHMETIC.
%
%***SEE ALSO  DXSET
%***REFERENCES  (NONE)
%***ROUTINES CALLED  XERMSG
%***COMMON BLOCKS    DXBLK2
%***REVISION HISTORY  (YYMMDD)
%   820712  DATE WRITTEN
%   881020  Revised to meet SLATEC CML recommendations.  (DWL and JMS)
%   901019  Revisions to prologue.  (DWL and WRB)
%   901106  Changed all specific intrinsics to generic.  (WRB)
%           Corrected order of sections in prologue and added TYPE
%           section.  (WRB)
%           CALLs to XERROR changed to CALLs to XERMSG.  (WRB)
%   920127  Revised PURPOSE section of prologue.  (DWL)
%***end PROLOGUE  DXADJ

global dxblk2_1; if isempty(dxblk2_1), dxblk2_1=0; end;
global dxblk2_2; if isempty(dxblk2_2), dxblk2_2=0; end;
global dxblk2_3; if isempty(dxblk2_3), dxblk2_3=0; end;
global dxblk2_4; if isempty(dxblk2_4), dxblk2_4=0; end;
global dxblk2_5; if isempty(dxblk2_5), dxblk2_5=0; end;
global dxblk2_6; if isempty(dxblk2_6), dxblk2_6=0; end;
global dxblk2_7; if isempty(dxblk2_7), dxblk2_7=0; end;
% common :: ;
%% common /dxblk2/ radix , radixl , rad2l , dlg10r , l , l2 , kmax;
%% common /dxblk2/ dxblk2_1 , dxblk2_2 , dxblk2_3 , dxblk2_4 , dxblk2_5 , dxblk2_6 , dxblk2_7;
% save :: ;
% save ::       ;
%
%   THE CONDITION IMPOSED ON L AND KMAX BY THIS SUBROUTINE
% IS
%     2*L .LE. KMAX
%
% THIS CONDITION MUST BE MET BY APPROPRIATE CODING
% IN SUBROUTINE DXSET.
%
%***FIRST EXECUTABLE STATEMENT  DXADJ
ierror = 0;
while (1);
if( x==0.0d0 )
ix = 0;
elseif( abs(x)>=1.0d0 ) ;
if( abs(x)>=dxblk2_2 )
x = x./dxblk2_3;
if( ix<=0 )
ix = fix(ix + dxblk2_6);
return;
elseif( ix<=dxblk2_7-dxblk2_6 ) ;
ix = fix(ix + dxblk2_6);
return;
else;
break;
end;
end;
elseif( dxblk2_2.*abs(x)<1.0d0 ) ;
x = x.*dxblk2_3;
if( ix>=0 )
ix = fix(ix - dxblk2_6);
return;
elseif( ix>=-dxblk2_7+dxblk2_6 ) ;
ix = fix(ix - dxblk2_6);
return;
else;
break;
end;
end;
if( abs(ix)<=dxblk2_7 )
return;
end;
break;
end;
xermsg('SLATEC','DXADJ','overflow in auxiliary index',207,1);
ierror = 207;
end %subroutine dxadj
%DECK DXC210

Contact us at files@mathworks.com