圆的,领带断路器,第二轮

我发表了圆的,甚至有联系几天前。史蒂夫·埃丁和丹尼尔·多兰立即有实质性的评论。这是我对他们的评论的反应。

内容

两个

我描述的四种选择如何打破关系——“甚至”,“奇怪”,“上”和“下”,都有相同的行为积极的和消极的数字。当前的内置使用“”的规则。

史蒂夫认为需要两个更多的选择敏感的符号数字。我将称之为“+”和“-”。他们轮向右和向左数轴。这是有时被称为轮对正无穷大和负无穷大。

样本

这是一些值的图表。

x = (-4.5:1:4.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

和情节。

扩展

当前的内置还包括扩展的可能性十促进舍入的力量,说,最近的1000多个,或1/1000,或三个重要人物。丹尼尔担心的是,在相同的功能扩展和打破僵局的选项会令人困惑。

但是,我认为这是好的,因为:

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

因此,语句

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

明确的区分。后x,其他参数可以在任何顺序。

这是我提议的改进请求。它是可用的在这里

类型round.m
函数r =圆(变长度输入宗量)% r =圆(x)尺度和轮x的元素到最近的整数。%违约:关系,元素中间整数,圆形远离零。% % r =圆(x,“甚至”)关系转到偶数。% r =圆(x,“奇怪的”)关系转到奇数。% r =圆(x,“了”)关系从0(默认)一样。% r =圆(x,“下来”)关系为零。% r =圆(x,“+”)向右轮在数轴上的关系。% r =圆(x,‘-’)向左轮在数轴上的关系。% % 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 =圆(x, n,“重要”),圆(.001234 2 '重大')= .0012 % r =圆(x, n,“小数)一样(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账户登录或创建一个新的。