在java中将线性比例转换为对数比例

时间:2017-12-08 10:50:51

标签: java linear logarithm

我看了一下,找到了一篇帮助我的帖子: Convert Linear scale to Logarithmic

然而,我或者做了一些我找不到的错误,或者我对这个公式有错误的想法。如果是对数刻度,我想将任何数字从线性1-256范围转换为它们各自的值。有人可以帮我纠正我的代码吗?当我尝试从零值低值时,它工作得很好,但试图转换超过160的任何东西得到我的结果,这是> 256。 这是我的代码:

package linear2log;

public class Linear2Log {

    public static void main(String[] args) {

        System.out.println("Ats3: " + lin2log(160));

    }

    public static long lin2log(int z) {
        int x = 1;
        int y = 256;
        double b = Math.log(y/x)/(y-x);
        double a = 10 / Math.exp(b*10);
        double tempAnswer = a * Math.exp(b*z);
        long finalAnswer = Math.max(Math.round(tempAnswer) - 1, 0);

         return finalAnswer;

    }

}

1 个答案:

答案 0 :(得分:1)

你得到的公式错了。

确定这一行

double a = 10 / Math.exp(b*10);

您正在使用示例中的值10,但您应该使用的值为256。

double a = y / Math.exp(b * y);

我不知道你为什么要使用这一行:

 long finalAnswer = Math.max(Math.round(tempAnswer) - 1, 0);

这样你总是得到比实际价值低一点的价值。