我查看并发现了一篇对我有帮助的帖子: 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);
这样你得到的值总是比实际值小一。
关于java - 在java中将线性刻度转换为对数刻度,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47712818/