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

📄 floatgui.m

📁 有趣的可视的数值方法 出自网站http://www.mathworks.com/moler
💻 M
字号:
function floatgui(callbackarg)%FLOATGUI  Show structure of floating point numbers.%  The set of positive model floating point numbers is determined%  by three parameters: t, emin, and emax.  It is the set of rational%  numbers of the form x = (1+f)*2^e where f = (integer)/2^t,%  0 <= f < 1, e = integer, and emin <= e <= emax.%%  IEEE 754 double precision has t = 52, emin = -1022, emax = 1023.% Initialize parametersif nargin == 0   t = 3;   emin = -4;   emax = 2;   logscale = 0;else   t = round(get(findobj('tag','t'),'value'));   emin = round(get(findobj('tag','emin'),'value'));   emax = round(get(findobj('tag','emax'),'value'));   logscale = get(findobj('style','check'),'value');end% Position figure windowshgclf resetset(gcf,'pos',[50 300 900 250],'name','floatgui', ...    'numbertitle','off','menubar','none')% Generate and plot floating point numbersf = (0:2^t-1)/2^t;F = [];for e = emin:emax   F = [F (1+f)*2^e];endfor x = F   text(x,0,'|')end% Set axesset(gca,'pos',[.05 .6 .9 .2])if logscale   set(gca,'xscale','log')   xmin = 1/2^(-emin+.5);   xmax = 2^(emax+1.5);else   set(gca,'xscale','linear')   xmin = 0;   xmax = 2^(emax+1);endaxis([xmin xmax -1 1])% Set tick marksfmin = min(F);fmax = max(F);xtick = 1;xticklab = '1';if fmin < 1   xtick = [1/2 xtick];   xticklab = ['1/2|' xticklab];endif logscale & (fmin < 1/4)   xtick = [1/4 xtick];   xticklab = ['1/4|' xticklab];endif fmin < 1/2   xtick = [fmin xtick];   xticklab = ['1/' int2str(1/fmin) '|' xticklab];endif 2 < fmax   xtick = [xtick 2];   xticklab = [xticklab '|2'];endif 4 < fmax   xtick = [xtick 4];   xticklab = [xticklab '|4'];endif max(xtick) < fmax   xtick = [xtick fmax];   if fmax == round(fmax)      fmaxlab = int2str(fmax);   else      over = 2^(emax+1);      fmaxlab = [int2str(over) '-1/' int2str(1/(over-fmax))];   end   xticklab = [xticklab '|' fmaxlab];endset(gca,'xtick',xtick,'xticklabel',xticklab,'xminortick','off','ytick',[])% Create uicontrolsuicontrol('style','slider','tag','emin','value',emin, ...   'min',-8,'max',0,'pos',[160 70 120 15],'sliderstep',[1/8 1/8], ...   'callback','floatgui(1)');uicontrol('style','slider','tag','t','value',t, ...   'min',0,'max',8,'pos',[400 70 120 15],'sliderstep',[1/8 1/8], ...   'callback','floatgui(1)');uicontrol('style','slider','tag','emax','value',emax, ...   'min',0,'max',8,'pos',[640 70 120 15],'sliderstep',[1/8 1/8], ...   'callback','floatgui(1)');uicontrol('style','text','string',['emin = ' int2str(emin)], ...   'pos',[160 90 120 20],'fontweight','bold')uicontrol('style','text','string',['t = ' int2str(t)], ...   'pos',[400 90 120 20],'fontweight','bold')uicontrol('style','text','string',['emax = ' int2str(emax)], ...   'pos',[640 90 120 20],'fontweight','bold')uicontrol('style','check','string','log scale','value',logscale, ...   'pos',[390 20 140 20],'fontweight','bold', ...   'callback','floatgui(1)');uicontrol('style','push','pos',[800 10 60 20], ...   'string','close','callback','close(gcf)')% epsif fmax > 1   eps = 2^(-t);   text(1,0,'|','color','r')   text(1+eps,0,'|','color','r')   if eps < 1      text(1.0,1.5,['eps = 1/' int2str(1/eps)], ...      'fontweight','bold')   else      text(1.0,1.5,'eps = 1','fontweight','bold')   endend% Number of numbers% Exercise:% How many "floating point" numbers are in the set?% Complete this statement.% text(.9*xmax,2,num2str(???))

⌨️ 快捷键说明

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