相关疑难解决方法(0)

python中的幂运算符(**)转化为什么?

换句话说,两个星号背后是什么?它只是将数字乘以x倍或其他?作为后续问题,写2**3或2*2*2是否更好.我问,因为我听说在C++中最好不要使用pow()进行简单的计算,因为它调用了一个函数.

python operators translate

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

pow()实现在cmath和有效的替换

我已经阅读了通过执行来cmath计算.当它是整数时,不应该使用它,因为它会大大减慢计算速度.有什么替代方案pow(a,b)exp(b*log(a))b

  1. 用相同的常数计算很多连续的pow()sa
  2. 它是事先知道这b肯定是一个整数?

我正在寻找在这些特定情况下有效的快速替代方案.

c c++ math cmath

7
推荐指数
1
解决办法
1万
查看次数

为什么pow()从我的结果中减去1?

我是C编程的新手,我编写了这段代码,因为我被要求主要使用printf()和scanf()来做一些事情.我知道可以有更好的方法来解决这个问题,我很快就需要学习,但无论如何,现在这就是我所拥有的:

int add1, add2, exponent, exponent_result, multiplier, parenthese, product, sub, total;

printf("Let's try a slightly more complex calculation, in which we'll use an exponent.\n\n");
printf("Type 5 whole numbers or integers.\n\n");
scanf("%i %i %i %i %i", &add1, &add2, &exponent, &multiplier, &sub);
printf("Out of the numbers you typed, we're going to make this operation: (%i + %i^%i) * %i - %i\n\n", add1, add2, exponent, multiplier, sub);

exponent_result = pow(add2, exponent);
parenthese = add1 + exponent_result;
product = parenthese * multiplier;
total = …
Run Code Online (Sandbox Code Playgroud)

c math codeblocks

7
推荐指数
1
解决办法
169
查看次数

如果赋值为整数,则pow()的返回值会向下舍入

pow在C中使用函数并将返回值存储为整数类型.请参阅下面的代码段:

for (i = 0; i < 5; i++){
    val = (int)pow(5, i);
    printf("%d, ", val);
}
Run Code Online (Sandbox Code Playgroud)

这里i,val是整数,输出是1, 5, 24, 124, 624.我相信这是因为浮点数25被视为24.99999 ...在分配给整数时会向下舍入到24.

如果我仍然需要将返回值存储在int中,我怎么能通过这个?

c pow

6
推荐指数
2
解决办法
6896
查看次数

如何以与List.hashCode()相同的方式计算流的哈希码

我刚刚意识到使用Stream.reduce(...)实现以下算法来计算流的哈希码是不可能的.问题是哈希码的初始种子1不是累加器的标识.

List.hashCode()的算法 :

int hashCode = 1;
for (E e : list)
  hashCode = 31*hashCode + (e==null ? 0 : e.hashCode());
Run Code Online (Sandbox Code Playgroud)

您可能会想到以下内容是正确的,但事实并非如此,尽管如果流处理没有拆分它会起作用.

List<Object> list = Arrays.asList(1,null, new Object(),4,5,6);
int hashCode = list.stream().map(Objects::hashCode).reduce(1, (a, b) -> 31 * a + b);
Run Code Online (Sandbox Code Playgroud)

看来,这样做的唯一明智的方法是得到IteratorStream和做正常的顺序处理或将其收集到List第一.

java hash hashcode java-stream

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

AVX512 log2或pow指令

我需要一个AVX512 double pow(double, int n)功能(我需要它进行二项分布计算,这需要精确).对于拥有AVX512ER的Knights Landing,我特别喜欢这个.获得这个的一种方法是

x^n = exp2(log2(x)*n)
Run Code Online (Sandbox Code Playgroud)

Knights Corner有vlog2ps指令(_mm512_log2_ps内在的)和vexp223ps指令(_mm512_exp223_ps intrinsic),所以至少我可以float pow(float, float)用这两个指令来做.

然而,在Knights Landing中我找不到log2指令.我确实在AVX512ER中找到了一条vexp2pd指令(_mm512_exp2a23_pd内在的).我觉得奇怪的是Knights Corner有一个log2指令但Knights Landing更新更好没有.

现在我已经实现了pow(double, n) 使用重复的平方,但我认为如果我有一个log2指令会更有效率.

//AVX2 but easy to convert to AVX512 with mask registers
static __m256d pown_AVX2(__m256d base, __m256i exp) {
  __m256d result = _mm256_set1_pd(1.0);
  int mask = _mm256_testz_si256(exp, exp);
  __m256i onei = _mm256_set1_epi64x(1);
  __m256d onef = _mm256_set1_pd(1.0);
  while(!mask) { …
Run Code Online (Sandbox Code Playgroud)

x86 pow xeon-phi avx512

6
推荐指数
0
解决办法
540
查看次数

pow for Integral Values

我需要一个pow整数版本.我有两个问题需要解决pow:

  1. 如果结果大于我的整数类型,我需要夹紧 numeric_limits::max()
  2. 我需要能够处理41.99999四舍五入到42,而不是下降到41

C++是否在这里为我提供了某种内联解决方案,或者我是不是在编写自己的函数:

template <typename T>
enable_if_t<is_integral_v<T>, T> mypow(const T base, unsigned int exp) {
    T result = exp == 0U ? base : 1;

    while(exp-- > 1U) {
        if(numeric_limits<T>::max() / result <= base) return numeric_limits<T>::max();
        result *= base;
    }
    return result;
}
Run Code Online (Sandbox Code Playgroud)

c++ floating-point integer pow clamp

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

Pow和mod功能优化

我需要创建一个优化函数来计算Math.pow(a,b)%c; 在Javascript中;
计算小数字时没有问题:
Math.pow(2345,123) % 1234567;
但是如果你试图计算:
Math.pow(2345678910, 123456789) % 1234567;
由于Math.pow()函数结果不能计算"大"数字,你会得到不正确的结果;
我的解决方案是:

function powMod(base, pow, mod){
    var i, result = 1;
    for ( i = 0; i < pow; i++){
        result *= base;
        result %= mod;
    }
return result;
Run Code Online (Sandbox Code Playgroud)

虽然需要大量的时间来计算;
有可能以某种方式优化它或找到更合理的方式来计算Math.pow(a,b)%c; 对于"大"数字?(我写的是"大",因为他们不是真正的大事);

javascript

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

如何在C++中将int或long提升为幂

琐碎的问题:我只是想知道,如果一个人想要提高一个int或一个long来强制另一个int或long,

(long)std::pow((double)a,(double)b)
Run Code Online (Sandbox Code Playgroud)

足够,或者我需要

(long)(0.5 + std::pow((double)a,(double)b))
Run Code Online (Sandbox Code Playgroud)

c++ pow

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

具有无符号长度的Pow精度

所以我想做pow(x,y).其中x和y是无符号长整数,结果存储在无符号长整数中.这个结果将小于2 ^ 63所以我应该能够做到这一点.但由于它返回一个浮点数,我得到大数字的不准确结果.无论如何都可以在不使用像bignum这样的外部库的情况下获得精确的结果?我知道我可以简单地做x*xa Y次,但这是我想避免的,因为我试图让我的程序更快.

c precision pow

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