我看了一下,找到了一篇帮助我的帖子: 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;
}
}
答案 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);
这样你总是得到比实际价值低一点的价值。