【发布时间】:2018-05-22 14:36:20
【问题描述】:
我查看并找到了一篇对我有帮助的帖子: 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;
}
}
【问题讨论】:
-
这几乎可以肯定是
int数学错误。将您所有的ints 更改为double应该可以解决您的问题。 -
对于示例中给出的值 x 和 y,情况并非如此。这可能是其他值的问题。此行有潜在危险:double b = Math.log(y/x)/(y-x);