标签: function-approximation

RGB/LAB转换的快速近似算法?

我正在使用OpenGL开发数据可视化工具,LAB颜色空间是我可以处理的数据可视化最容易理解的颜色空间(3轴数据被映射到颜色空间的3个轴).是否存在快速(例如,没有非整数求幂,适合在着色器中执行)算法,用于将LAB值近似转换为RGB值和从RGB值转换?

algorithm colors color-space pixel-shader function-approximation

8
推荐指数
1
解决办法
1354
查看次数

通过分离有效数和指数来近似log2(浮点数)

问题

我正在尝试实现一个快速浮点数= log2(浮点数).我写了一个简单的C程序来比较我的结果和log2,我得到一个小错误,我找不到源代码.

背景

我正在采用识别浮点表示(忽略符号位)的方法2^(exponent) * 1.significand.使用我得到的日志属性log2(float) = exp + log2(1.significand).最终我会截断表查找的有效数字,但是现在我想验证正确的结果.

有关灵感的进一步背景阅读:http://www.icsi.berkeley.edu/pubs/techreports/TR-07-002.pdf

这就是问题所在.这是一个简单的程序,它提取浮点位并将指数加到log2(有效数字).

#include <math.h>
#include <stdint.h>
#include <stdio.h>

int main()
{
    typedef union {
      int32_t i;
      float f;
    } poly32_t;

    float x = 31415926535.8;
    poly32_t one;
    one.f = 1.0f;

    uint32_t ii;
    uint32_t num_iter = 15;
    for(ii=0; ii < num_iter; ++ii) {
        poly32_t poly_x;
        poly32_t poly_x_exponent;
        poly32_t poly_x_significand;

        // extract the exponent and significand
        poly_x.f = x;
        poly_x_significand.i = (0x007fffff & poly_x.i); …
Run Code Online (Sandbox Code Playgroud)

c math approximation function-approximation

6
推荐指数
1
解决办法
423
查看次数

如何在x64 CPU上快速计算sincos?

这是一个在SSE/AVX指令系列中经验丰富的用户,以及熟悉其性能分析的人员.我看到了很多不同的实现和方法,从较旧的SSE2到新的.网络充斥着这样的链接.但就我个人而言,我对sse装配分析并不十分经验.有些人指出了uops,缓存,这需要一些低级知识.所以我要求提示和你的个人经历.如果你有时间推出一些比较,在"什么是最快的"以及为什么,你看到了什么方法.实现可能不那么精确,单个FP精度的10-16位就足够了.越多越好,但是当它不影响速度时.

PS.为了避免元洪水,我可以准确地描述任务的细节:

  • 给定标量参数x(以弧度表示),它在xmm寄存器中传递(根据x64 fastcall约定).
  • 写一个带签名的函数__m128 sincos(float x); 返回其sin(x)和cos(x)值近似值.
  • 返回值应在一个xmm寄存器内,并以尽可能最快的方式计算,以满足10位精度要求.
  • 参数可以是任何数(而不是nan,inf,等等).如果方法需要参数规范化,其性能实现(fmod())也是主题.但问题不在于处理特殊FP案件.

这可能是重复的,但我没有在这里找到类似的问题,所以请指出我,如果已经有一个.

performance trigonometry sse avx function-approximation

5
推荐指数
1
解决办法
534
查看次数