第二轮,有决胜局

我发表了圆,平,平几天前。史蒂夫·艾丁斯和丹尼尔·多兰立即发表了实质性的评论。以下是我对他们评论的反应。

内容

两个

我描述的四种打破平局的方法——“偶数”、“奇数”、“上”和“下”——对于正数和负数都有相同的行为。当前内置的使用“上”规则。

史蒂夫认为需要另外两个对数字符号敏感的选项。我称它们为“加”和“减”。它们在数轴上向左向右旋转。这有时被称为向正无穷和向负无穷圆。

样本

这是一些数值的图表。

X = (-4.5: 1:45 .5)';xRound (x);
x围捕下偶奇+ -3.500 - -4.500 5 5 4 4 5 4 5 4 4 3 3 3 4 -2.500 - 3 3 2 2 3 2 3 -1.500 - 2 2 1 2 1 1 2 1 1 0 0 1 0 1 0.500 -0.500 1.500 1 1 0 0 1 1 0 2 2 1 2 1 2 1 3.500 2.500 3 3 2 2 3 3 2 4 5 4 3 4 3 4 3 4.500 5 4 4 5 5 4

还有情节。

扩展

当前内置的还包括按10的幂进行缩放的可能性,以方便舍入到,例如,1000的最接近倍数,或1/1000,或三个有效数字。Daniel担心在同一个函数中同时使用扩展和断开连接选项会让人感到困惑。

但是,我认为这没问题,因为:

  • 轮(x,“甚至”),参数“甚至”是一个字符
  • 轮(x, 3),参数3.是数字。
  • 轮(x 3 '重大'),参数“重要的”是一个特定的字符

那么,这些表述

  • 轮(x,“甚至”,3)
  • 轮(x, 3,“甚至”)
  • 轮(x,“甚至”3“显著的”)

是明确的和可区分的。后x,其他参数可以任意顺序给出。

这是我关于增强请求的建议.它是可用的在这里

类型round.m
函数r = round(varargin) % r = round(x)将x的元素缩放并舍入到最接近的整数。默认值:整数之间的元素,从零开始四舍五入。% % r = round(x,'even')将四舍五入绑定为偶数整数。% r = round(x,'odd')将整数绑定为奇数。% r = round(x,'up')从零开始四舍五入(与默认值相同)。% r = round(x,'down')使round趋于0。% r = round(x,'plus')在数轴右侧打整。% r = round(x,'minus')在数轴左侧打整。% % r =圆(x, n)、n > = 0,轮(10 ^ n * x) / 10 ^ n,圆(12.3456,2)= 12.3500% r =圆(x - n)、n > 0, 10 ^ n * (x / 10 ^ n),圆(1234.56,2)= 1200。% r = round(x,n,'significant'), round(.001234,2,'significant') = . 0012% r = round(x,n,'小数点)与round(x,n)相同。 % % r = round(x,...), ties, n, 'significant' and 'decimals' can be in any order. % % Use Round(...) with capital R to distinguish from built-in round(...). [x,n,ties] = parse_input(varargin{:}); x = prescale(x,n); a = abs(x) + 0.5; r = floor(a); switch ties case 'even' m = (r == a) & (mod(r,2) == 1); case 'odd' m = (r == a) & (mod(r,2) == 0); case 'down' m = (r == a); case 'up' m = []; case 'plus' m = (x < 0) & (r == a); case 'minus' m = (x > 0) & (r == a); otherwise error(['''' ties ''' not recognized.']) end r(m) = r(m) - 1; r = sign(x).*r; r = postscale(r,n); % ---------------------------------------------- function [x,n,ties] = parse_input(varargin) x = varargin{1}; n = zeros(size(x)); ties = 'up'; for k = 2:nargin if isnumeric(varargin{k}) n(:) = varargin{k}; elseif strcmp(varargin{k},'significant') n(:) = n(:) - ceil(log10(abs(x(:)))); elseif strcmp(varargin{k},'decimals') % ignore else ties = varargin{k}; end end end function x = prescale(x,n) if any(n ~= 0) k = n > 0; x(k) = 10.^n(k).*x(k); k = n < 0; x(k) = x(k)./10.^(-n(k)); end end function r = postscale(r,n) if any(n ~= 0) k = n > 0; r(k) = r(k)./10.^n(k); k = n < 0; r(k) = 10.^(-n(k)).*r(k); end end end




发布与MATLAB®R2021a

|

评论

如欲留言,请点击在这里登录到您的MathWorks帐户或创建一个新帐户。