在 java 中将线性刻度转换为对数刻度

Converting linear scale to log scale in java

我查看并找到了一个 post 对我有帮助: 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;
    }
}

你把公式弄错了。

确定这一行

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);

这样你得到的值总是比实际值少一。