【问题标题】:What kind of logarithm functions / methods are available in objective-c / cocoa-touch?在objective-c/cocoa-touch中有哪些对数函数/方法?
【发布时间】:2009-05-21 08:55:25
【问题描述】:

我试过搜索对数 + Objective-c,但我得到的只是老师的数学测试页,或者对数是什么的解释;)

我有一些测量值,例如 83912.41234,而其他测量值是 32.94232。我需要将这个巨大的频谱压缩到 0 到 100 之间,而 32.94232 至少应该大于 2,而 83912.41234 会接近 100。所以我认为对数函数将是我的朋友。

更新: 我通过“快速打开”(Xcode 中非常好的命令:SHIFT + CMD + D)找到了 math.h 文件,然后,大吃一惊:

extern double log ( double );
extern float logf ( float );

extern double log10 ( double );
extern float log10f ( float );

extern double log2 ( double );
extern float log2f ( float );

extern double log1p ( double );
extern float log1pf ( float );

extern double logb ( double );
extern float logbf ( float );

但是:没有文本,没有 cmets。我不是那种数学狂。所以一些描述会很好,即什么情况下的对数,曲线的样子等等......所以任何伟大的链接都非常感谢!

【问题讨论】:

  • 您在寻找曲线还是直线上的结果?
  • 我必须尝试一下,但目前我猜它是一条曲线。 log2() 看起来不错,但它也似乎是一个非常昂贵的计算。
  • 当我使用 log2() 时,性能似乎急剧下降。但不能 100% 确定是 log2() 的错。虽然看起来很像,因为当我不使用它,只做一个 x * 0.00412 + 2 时,感觉性能更好。
  • 测量,测量,测量。 Ue Shark 或 Instruments 告诉你到底发生了什么。
  • 除此之外,您使用的任何版本的日志都会得到可比较的结果,因为它们是单调函数。

标签: objective-c cocoa-touch math logarithm


【解决方案1】:

另外,得到一个任意底数的对数:

float logx(float value, float base) 
{
   return log10f(value) / log10f(base);
}

【讨论】:

    【解决方案2】:

    math.h 是一个标准的包含。 wikipedia 页面有一些文档。

    另一种“压缩”值的方法是将您的值拟合成一条直线。以你为例:

    直线方程

    y = mx + c
    y = 'squished' value.
    x = The value you want to squish
    m = Gradient of the line
    c = intercept on the y axis
    

    对您的值进行快速计算得出如下结果:

    y = 1.17e-3 x + 1.96
    

    希望这会有所帮助。

    【讨论】:

      【解决方案3】:

      买一本关于 C 标准库函数的书怎么样?

      否则,您可以尝试手册页: 以man 3 logf为例

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-11-08
        • 1970-01-01
        • 2019-09-24
        相关资源
        最近更新 更多