⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 demo_fl_1.m

📁 SFLOP simulates a floating point operation x op y where op = +, -, *, /
💻 M
字号:
%  DEMOFL  demonstrates some phenomena related%  to floating point arithmetic.%%  Matthias Heinkenschloss%  Department of Computational and Applied Mathematics%  Rice University%  Feb 12, 2001%clear; clc;disp('                                                                  ')disp('  Let the real number  x  be written as                           ')disp('             0       -1      -2      -    -t       -(t+1)      e  ')disp('  x = ( d * b + d * b + d * b +..... d * b +  d * b + ... ) * b , ')disp('         0       1       2            t-1      t                  ')disp('                                                                  ')disp('  where   b > 1  is the base and  e  is the exponent. If x is not ')disp('  equal to zero, then d_0 is normalized to be nonzero             ')disp('  (The base  b  and the exponent  e  are integer.)                ')disp('  If the exponent is in [ e_low, e_upp ], then the floating point ')disp('  representation of x is given by                                 ')disp('                 0       -1      -2           -t     e            ')disp('  fl(x) = ( d * b + d * b + d * b +..... d * b  ) * b  ,          ')disp('             0       1       2            t                       ')disp('  The t-th digit of  fl(x)  is given by                           ')disp('         -                                                        ')disp('         d    = d       if   d    <  0.5*b ,                      ') disp('          t-1    t-1          t                                   ')disp('         -                                                        ')disp('         d    = d   +1  if   d    >= 0.5 * b.                     ')disp('          t-1    t-1          t                                   ')disp('                                                                  ')disp(' Hit a key to continue '); pauseclear; clc;disp('                              ')disp('                              ')disp('                              ')disp(' Example 1:  Floating Point Representation of Real Numbers')disp('                              ')disp(' Base b = 10                  ')disp(' Mantissa length t = 4');disp(' lower boundary of exponent range e_low = 10^(-37)');disp(' upper boundary of exponent range e_upp = 10^(37)');b = 10;t = 4;x = 1;while( ~isempty(x) )  disp('    ')  x = input(' Enter a number (Enter RETURN to quit)  x = ');  if( isempty(x) ) break; end  flx = sfl(x,t,'r');  if( x == 0 )      abserr = abs(x - flx);      fprintf(1, '  x                  = %12.6e  \n', x );      fprintf(1, '  fl(x)              = %12.6e  \n', flx);      fprintf(1, '  |x - fl(x) |       = %12.6e  \n', abserr);  else      abserr = abs(x - flx);      relerr = abserr / abs(x);      fprintf(1, '  x                  = %12.6e  \n', x );      fprintf(1, '  fl(x)              = %12.6e  \n', flx);      fprintf(1, '  |x - fl(x) |       = %12.6e  \n', abserr);      fprintf(1, '  |x - fl(x)| / |x|  = %12.6e  \n', relerr);  endendclear;clc;disp('                              ')disp('                              ')disp('                              ')disp(' Example 2:  Floating Point Operations with Real Numbers')disp('                              ')disp(' Base b = 10                  ')disp(' Mantissa length t = 4');disp(' lower boundary of exponent range e_low = 10^(-37)');disp(' upper boundary of exponent range e_upp = 10^(37)');b = 10;t = 4;x = 1;while( ~isempty(x) )  disp('    ')   x = input(' Enter a number (hit RETURN to quit)  x = ');  if( isempty(x) ) break; end  y = input(' Enter a number (hit RETURN to quit)  y = ');  if( isempty(x) | isempty(y) ) break; end;  xpy    =  x + y;  fxpy   = sflop( x, y, t, 'r', '+' );  abserr = abs(xpy - fxpy);  relerr = abserr / abs(xpy);  fprintf(1, '  x + y              = %12.6e  \n', xpy );  fprintf(1, '  fl(fl(x)+fl(y))    = %12.6e  \n', fxpy);  fprintf(1, '  absolute error     = %12.6e  \n', abserr);  fprintf(1, '  relative error     = %12.6e  \n\n', relerr);  xmy    =  x - y;  fxmy   = sflop( x, y, t, 'r', '-' );  abserr = abs(xmy - fxmy);  relerr = abserr / abs(xmy);  fprintf(1, '  x - y              = %12.6e  \n', xmy );  fprintf(1, '  fl(fl(x)-fl(y))    = %12.6e  \n', fxmy);  fprintf(1, '  absolute error     = %12.6e  \n', abserr);  fprintf(1, '  relative error     = %12.6e  \n\n', relerr);  xty    =  x * y;  fxty   = sflop( x, y, t, 'r', '*' );  abserr = abs(xty - fxty);  relerr = abserr / abs(xty);  fprintf(1, '  x * y              = %12.6e  \n', xty );  fprintf(1, '  fl(fl(x)*fl(y))    = %12.6e  \n', fxty);  fprintf(1, '  absolute error     = %12.6e  \n', abserr);  fprintf(1, '  relative error     = %12.6e  \n\n', relerr);  xdy    =  x / y;  fxdy   = sflop( x, y, t, 'r', '/' );  abserr = abs(xdy - fxdy);  relerr = abserr / abs(xdy);  fprintf(1, '  x / y              = %12.6e  \n', xdy );  fprintf(1, '  fl(fl(x)/fl(y))    = %12.6e  \n', fxdy);  fprintf(1, '  absolute error     = %12.6e  \n', abserr);  fprintf(1, '  relative error     = %12.6e  \n', relerr);end

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -