标签: absolute-value

为什么argmax abs有blas子程序(ISAMAX)但argmax没有?

为什么有BLAS子程序ISAMAX为argmax ABS而不是argmax

在使用std :: max_element和编译器优化标志的C++中,-O3我的速度与blas_isamax(16 ms vs 9 ms)相当,所以目前我的问题更多的是出于对速度的需求而不是出于兴趣.

c++ blas absolute-value lapack argmax

4
推荐指数
1
解决办法
290
查看次数

加快C++的双倍绝对值

我正在分析我的代码并优化我所能做的一切,直到一个看起来像这样的函数:

double func(double a, double b, double c, double d, int i){
    if(i > 10 && a > b || i < 11 && a < b)
        return abs(a-b)/c;
    else
        return d/c;
}
Run Code Online (Sandbox Code Playgroud)

在程序运行期间,它被称为数百万次,并且分析器向我显示,大约80%的时间都用于呼叫abs().

  1. 我替换abs()fabs()它并且它提供了大约10%的加速,这对我来说没有多大意义,因为我多次听说它们对于浮点数是相同的并且abs()应该总是使用.这是不真实的还是我错过了什么?

  2. 什么是评估双重绝对值的最快方法,可以进一步提高绩效?

如果重要的话,我g++在Linux X86_64上使用.

c++ performance profiling absolute-value c++11

3
推荐指数
1
解决办法
2776
查看次数

通过位操作更快地实现Math.abs()

Math.abs(x)(由Oracle实施)的常规实现由

public static double abs(double a) {
  return (a <= 0.0D) ? 0.0D - a : a;
}
Run Code Online (Sandbox Code Playgroud)

仅将数字符号的一位编码设置为零(或一位)是否更快?我想只有一个位编码数字的符号,并且它总是相同的位,但是我可能是错的。

还是我们的计算机通常不适合使用原子指令对单个位进行操作?

如果可以更快地实施,您能给出吗?

编辑:

已经向我指出Java代码是平台无关的,因此它不能依赖于单机的原子指令是什么。但是,为了优化代码,JVM热点优化器确实考虑了计算机的具体情况,并且可能会应用正在考虑的最优化方法。

但是,通过一个简单的测试,我发现至少在我的机器上,该Math.abs功能似乎并未针对单个原子指令进行优化。我的代码如下:

    long before = System.currentTimeMillis();
    int o = 0;
    for (double i = 0; i<1000000000; i++)
        if ((i-500)*(i-500)>((i-100)*2)*((i-100)*2)) // 4680 ms
            o++;
    System.out.println(o);
    System.out.println("using multiplication: "+(System.currentTimeMillis()-before));
    before = System.currentTimeMillis();
    o = 0;
    for (double i = 0; i<1000000000; i++)
        if (Math.abs(i-500)>(Math.abs(i-100)*2)) // 4778 ms
            o++;
    System.out.println(o);
    System.out.println("using Math.abs: "+(System.currentTimeMillis()-before));
Run Code Online (Sandbox Code Playgroud)

这给了我以下输出:

234
using multiplication: 4985 …
Run Code Online (Sandbox Code Playgroud)

java bit-manipulation absolute-value

3
推荐指数
1
解决办法
2648
查看次数

当应用于浮点值时,std::abs 和 std::fabs 之间有什么区别吗?

有一个相关的问题,但我相信它没有回答这个问题。

查看std::absstd::fabs文档,他们似乎具有完全相同的行为。作为个人注释,在我看来这std::fabs是可取的,因为它减轻了(见注释)中std::abs(int)定义的歧义。<cstdlib>

所以我的问题是:除了std::abs(int)潜在的歧义之外std::absstd::fabs在应用于浮点值之间以及在应用于浮点值时是否有任何区别?

c++ floating-point absolute-value

3
推荐指数
1
解决办法
5560
查看次数

在Python的列表中使用abs()

我试图创建一个整数列表,然后扫描它,以找到列表元素的减法的最小绝对值.我已经创建了列表,但是代码中存在找到最小绝对值的问题,因为它显示的结果不正确.我认为这可能是在循环期间列表元素的可能性.你能帮我找到吗?

例如,当我创建一个列表时? = [2, 7, 5, 9, 3, 1, 2],结果min应该是0,但它是1.

这是我的代码:

min=1000
for i in range (1, N-1):
    for j in range (i+1, N):
        if (abs (A [i-1] - A [j-1])<min):
            min = abs (A [i-1] - A [j-1])
print ("%d" %min)
Run Code Online (Sandbox Code Playgroud)

python loops for-loop list absolute-value

3
推荐指数
1
解决办法
3074
查看次数

用 Numpy 计算复数的绝对值

我在 Python 中有以下脚本。我正在计算数组的傅立叶变换。当我想绘制结果(傅立叶变换)时,我使用的是该计算的绝对值。但是,我不知道复数的绝对值是如何产生的。有谁知道它是如何计算的?我需要这个在 Java 中重现。

import numpy as np
import matplotlib.pyplot as plt
from numpy import fft

inp = [1,2,3,4]

res = fft.fft(inp)

print(res[1]) # returns (-2+2j) complex number

print(np.abs(res[1])) # returns 2.8284271247461903
Run Code Online (Sandbox Code Playgroud)

python numpy absolute-value

3
推荐指数
2
解决办法
5525
查看次数

在 AVX 中寻找绝对

在其中一个解决方案中,他/她发现AVX 向量的abs(inp)为,

__m256 符号位 = _mm256_set1_ps(-0.0f); __m256 inp_abs = _mm256_andnot_ps(sign_bit, inp);

其背后的逻辑是什么?

SSE/AVX:根据每个元素的最小和最大绝对值从两个 __m256 浮点向量中进行选择

floating-point ieee-754 avx absolute-value avx2

3
推荐指数
1
解决办法
846
查看次数

如何简化32 Xor绝对数和值的装配平移右移

我不知道原始代码,但我不相信这是复杂的右移和abs.

以下是重命名的反编译IDA PRO代码的外观

char Ship; //Could be 0-7 (8 is reversed for special purpose)
char NewShip = 1; //Could be 0-7  (8 is reversed for special purpose)
short Frequency = 0; //This could be from 0 to 9999
bool NumberToFrequency = true;

Frequency = GetNextFrequencyToJoin(player->MyArena);
if ( NumberToFrequency )
{ //TODO: maybe the below is just Frequency % 7; ?
  NewShip = (((unsigned long)Frequency >> 32) ^ abs(Frequency) & 7) - ((unsigned long)Frequency >> 32);
  Ship = NewShip;
} else …
Run Code Online (Sandbox Code Playgroud)

assembly xor shift ida absolute-value

2
推荐指数
1
解决办法
193
查看次数

使用stl c ++对数字使用绝对值进行排序

我正在尝试使用 stl sort 函数根据绝对值对给定数组进行排序,但它没有按指定顺序排序:我编写的代码:

int fun(int i,int j)
{
    if(abs(i)<abs(j))
        return j;
    else
        return i;
}

int main()
{
    int arr[100000];
    int i,n;
    cin>>n;
    for(i=0;i<n;i++)
        cin>>arr[i];
    sort(arr,arr+n,fun);

    int diff=1000000ll;
    int x=0;
    int y,z;

    for i 0 to n
       cout<<arr[i];
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

c++ sorting stl absolute-value

2
推荐指数
1
解决办法
3458
查看次数

Java 中的什么方法返回两个整数的绝对差?

MathJava类中有没有返回两个整数的绝对差的方法?

int absDiff = 8 - 15;
int answer = 7;
Run Code Online (Sandbox Code Playgroud)

java integer absolute-value

2
推荐指数
1
解决办法
7986
查看次数