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

标签 java logarithm

我查看并发现了一篇对我有帮助的帖子: 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/

相关文章:

java - Spark-ClassNotFoundException:org.eclipse.jetty.server.bio.SocketConnector

java - 运行 JNI native 代码时的 JRE SIGSEGV

math - 查找大整数是否是十的幂的最快方法是什么?

math - 对数刻度

java - BigDecimal 的对数

java - setColumnWidth() 似乎不起作用

java - 如何使用java发送电子邮件

javascript - 具有对数轴的 HighCharts 图表中不考虑最小和最大轴值

java - 如何获取 IFile 的完全限定名称?

Python-在数据上拟合对数模型曲线