首页 > js 大神的算数题

js 大神的算数题

基于d3.js 不清楚也没关系

    function calc(max, min, countHint){
        span = max-min;
        step = Math.pow(10, Math.floor(Math.log(span / countHint) / Math.LN10));

        err = countHint / span * step;

       // Filter ticks to get closer to the desired count.
        if err <= .15 then step *= 10
        else if err <= .35 then step *= 5
        else if err <= .75 then step *= 2

        return step;

    }

    calc(300,100,6);

有没有人看懂啊?为什么 求 step 这么复杂,到底在算什么?

    Math.log(num) / Math.LN10

这个函数其他地方也出现过,是为了干嘛的?


log运算不知道吗- -
以10为低的log运算的含义不知道吗- -
就算不知道,不会试一下吗- -

吐槽啊

楼主,让你实现一个问题:给一个数n,求数n的位数。你会怎么写。


数学问题。

Math.log = ln
Math.LN10 = Math.log(10) = ln(10)
Math.log(num) / Math.LN10 = ln(num)/ln(10) = log_10(num) = lg(num)
Math.pow(10, Math.floor(Math.log(span / countHint) / Math.LN10)) = 10^(Math.floor((lg(num))) >= num;

关键在于Math.floor,可以将这个值变大一点。


首先说一下后一个问题,js里Math.log是数学函数里的ln,就以e为底的对数Math.log(num) / Math.LN10就是算以10为底的对数了,你可以参考一下换底公式

前一个问题看明白了
step = Math.pow(10, Math.floor(Math.log(span / countHint) / Math.LN10));算的是一个10^n的step,实际的步长应该是间隔/总数,就是span / countHint,于是把二者相除得到了err,判断err的值,而乘上一个相应的系数是为了让step更接近span / countHint,但是实际误差仍然可能会很大。最终目的是算一个x*10^n的步长,原因不明


这个 没有上下文 不知道什么意思 应该是某种意义上的步进值吧。

【热门文章】
【热门文章】