相关疑难解决方法(0)

为什么Java切换连续的int似乎在添加的情况下运行得更快?

我正在研究一些需要高度优化的Java代码,因为它将在我的主程序逻辑中的许多点调用的热函数中运行.此代码的一部分涉及将double变量乘以10凸起到任意非负int exponents.一个快速的方式(编辑:但不是最快的,见下面的更新2)获得相乘的值是switchexponent:

double multiplyByPowerOfTen(final double d, final int exponent) {
   switch (exponent) {
      case 0:
         return d;
      case 1:
         return d*10;
      case 2:
         return d*100;
      // ... same pattern
      case 9:
         return d*1000000000;
      case 10:
         return d*10000000000L;
      // ... same pattern with long literals
      case 18:
         return d*1000000000000000000L;
      default:
         throw new ParseException("Unhandled power of ten " + power, 0);
   }
}
Run Code Online (Sandbox Code Playgroud)

上面注释的省略号表示case int常量继续递增1,因此case上面的代码片段中确实有19 秒.因为我不知道我是否真的需要10一切权力,并case声明 …

java compiler-construction performance assembly switch-statement

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

'switch'比'if'快吗?

是一种switch说法实际上比更快的if声明?

我使用/Ox标志在Visual Studio 2010的x64 C++编译器上运行下面的代码:

#include <stdlib.h>
#include <stdio.h>
#include <time.h>

#define MAX_COUNT (1 << 29)
size_t counter = 0;

size_t testSwitch()
{
    clock_t start = clock();
    size_t i;
    for (i = 0; i < MAX_COUNT; i++)
    {
        switch (counter % 4 + 1)
        {
            case 1: counter += 4; break;
            case 2: counter += 3; break;
            case 3: counter += 2; break;
            case 4: counter += 1; break;
        }
    }
    return …
Run Code Online (Sandbox Code Playgroud)

c performance assembly switch-statement jump-table

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

Java`final`方法:它有什么承诺?

在Java类中,可以定义一个方法final,以标记此方法可能不会被覆盖:

public class Thingy {
    public Thingy() { ... }
    public int operationA() {...}
    /** this method does @return That and is final. */
    public final int getThat() { ...}
}
Run Code Online (Sandbox Code Playgroud)

这很清楚,它可能有助于防止意外覆盖,或者表现 - 但这不是我的问题.

我的问题是:从OOP的角度来看,我理解通过定义一个方法final,类设计者承诺这个方法将始终如所描述或隐含的那样工作.但是,这通常可能超出了班级作者的影响,如果该方法所做的事情比传递财产更复杂.

句法约束对我来说很清楚,但OOP意义上的含义是什么?final大多数班级作者在这个意义上是否正确使用?

final方法承诺什么样的"合同" ?

java oop final

134
推荐指数
3
解决办法
9万
查看次数

什么是确定输入是否是完美正方形的好算法?

可能重复:
确定整数的平方根是否为整数的最快方法

有什么方法可以看出一个数字是否是一个完美的正方形

bool IsPerfectSquare(long input)
{
   // TODO
}
Run Code Online (Sandbox Code Playgroud)

我正在使用C#,但这与语言无关.

奖励点是为了清晰和简洁(这不是代码高尔夫).


编辑:这比我想象的要复杂得多!事实证明,双精度问题有两种表现形式.首先,Math.Sqrt采用了一个不能精确控制的长度(感谢Jon).

其次,当你拥有一个巨大的,接近完美的正方形时,双精度将失去小值(.000 ... 00001).例如,我的实现未通过Math.Pow(10,18)+1的测试(我的报告为真).

algorithm math perfect-square

85
推荐指数
3
解决办法
4万
查看次数

测试一个数字是否是斐波那契

我知道如何制作Fibonacci数列表,但我不知道如何测试给定数字是否属于斐波纳契列表 - 记住的一种方法是生成fib列表.数字达到那个数字并查看它是否属于数组,但必须有另一种更简单,更快速的方法.

有任何想法吗 ?

c++ testing algorithm math fibonacci

71
推荐指数
9
解决办法
4万
查看次数

检查一个数字是否是一个完美的正方形

我怎么能检查一个数字是否是一个完美的正方形?

速度无关紧要,现在,只是工作.

python math perfect-square

70
推荐指数
8
解决办法
13万
查看次数

获取sqrt(n)整数部分的最快方法?

我们知道如果n不是一个完美的正方形,那么sqrt(n)就不会是一个整数.由于我只需要整数部分,我觉得调用sqrt(n)不会那么快,因为计算小数部分也需要时间.

所以我的问题是,

我们是否只能获得sqrt(n)的整数部分而不计算实际值sqrt(n)?算法应该比sqrt(n)(在<math.h>或中定义<cmath>)更快?

如果可能,您也可以在asm块中编写代码.

c c++ algorithm math performance

64
推荐指数
6
解决办法
5万
查看次数

寻找ARM Thumb2的有效整数平方根算法

我正在寻找一个快速,仅整数算法来找到无符号整数的平方根(整数部分).代码必须在ARM Thumb 2处理器上具有出色的性能.它可以是汇编语言或C代码.

任何提示欢迎.

embedded arm square-root

42
推荐指数
6
解决办法
5万
查看次数

一系列整数是否包含至少一个完美的正方形?

鉴于两个整数ab,有没有检验是否有另一个整数的有效方式n,使得?a ? n2 < b

我不需要知道n,只知道是否n存在至少一个这样的存在,所以我希望避免计算区间中任何数字的平方根.

虽然测试单个整数是否是完美的正方形比计算平方根更快,但是范围可能很大,我也希望避免对该范围内的每个数字执行此测试.

例子:

  • intervalContainsSquare(2, 3) =>假
  • intervalContainsSquare(5, 9) => false(注意:9超出此间隔)
  • intervalContainsSquare(9, 9) => false(此间隔为空)
  • intervalContainsSquare(4, 9) => true(4在此区间内)
  • intervalContainsSquare(5, 16) => true(9在此区间内)
  • intervalContainsSquare(1, 10) => true(1,4和9都在此区间内)

algorithm math integer square-root

27
推荐指数
2
解决办法
1873
查看次数

检查完美广场的最短路径?

可能重复:
确定输入是否是完美正方形的好算法是什么?

我希望用最短最简单的方法来检查数字是否是C#中的完美平方

一些完美的正方形:

1, 4, 9, 16, 25, 36, 49, 64, 81, 100, ......
Run Code Online (Sandbox Code Playgroud)

c# square-root

25
推荐指数
3
解决办法
3万
查看次数