代码之家  ›  专栏  ›  技术社区  ›  Andy

从分辨率计算数字/小数位

  •  0
  • Andy  · 技术社区  · 7 年前

    有没有一种简单的方法来计算以给定分辨率显示浮点数所需的位数(不经过字符串转换)

    resolution = [0.1 0.01 0.05 0.025 0.10001];
    
    % first try
    digits = -floor (log10 (resolution))
    
    % wanted output
    ex_digits = [1 2 2 3 5];
    

    给予

    digits =
       1   2   2   2   1
    

    2 回复  |  直到 7 年前
        1
  •  4
  •   rahnema1    7 年前

    你可以把这个数乘以10的幂,然后把结果和它的下限相比较。

    resolution = [0.1 0.01 0.05 0.025 0.10001];
    k = resolution .* 10.^(1:20).';
    [~, digits] = max(round(k)==k);
    

    也可以使用公差来考虑精度误差:

    r = round(k);
    tol = eps(r) * 2;
    [max_val, digits] = max(abs(r-k) < tol);
    digits = max_val .* digits + ~max_val .* 20;
    
        2
  •  3
  •   Tasos Papastylianou    7 年前

    像这样的事情似乎已经足够接近了:

    ceil( log10( [~, D] = rat( resolution, eps ) ) )