在 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);
这样你得到的值总是比实际值少一。
我查看并找到了一个 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);
这样你得到的值总是比实际值少一。