小编Dra*_*rgy的帖子

从Python调用C Math函数的高效解决方案

我听说过从Python代码调用C函数的不同方法,比如ctypes,cython,swig,Boost.python等.当然,每个方法都有优缺点.我的问题是关于效率.我需要从Python调用C数值函数.这种C函数的典型示例是:

double f(double x){
  return sin(x)+cos(x)-pow(2,x) + x*x;
}
Run Code Online (Sandbox Code Playgroud)

调用需要在一次运行中迭代2000-200000次.

在这样的背景下,C->Python我应该使用哪种变压器?

c python performance swig ctypes

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

用空的return语句退出函数是好/不好的做法吗?

我看过很多例子,这使我不只是好奇

以下是两个示例:

  • return;void函数的末尾,这简直是荒谬的。
  • return;在函数中间使用可以打破它。我不喜欢

下面的示例可以阐明第二种情况(第一种情况很明显):

- SomeMethodThatReturnsSomethingOrNot(var param1){

    if (param1 == null){

         CallThisMethod();
         return;
    }

    CallThisOtherMethod(param1);

}
Run Code Online (Sandbox Code Playgroud)

对很多人来说,这很好而且很清楚。对我来说,这充其量是可以接受的。

为什么不简单地使用an if else?您可以避免在return代码中间不需要任何内容,它不会降低可读性,而且,我不知道还有什么要说的,对我来说,这似乎是一种更好的做法。

- SomeMethodThatReturnsSomethingOrNot(var param1){

        if (param1 == null){
             CallThisMethod();
        }else{
             CallThisOtherMethod(param1);
        }

    }
Run Code Online (Sandbox Code Playgroud)

现在,我想在这里强调示例的简单性,我知道可以制作出一些性感的东西,但是我们假装比null检查要复杂一些,需要使用相同的if-return替代of if-else技术。

那么,每个人的想法是什么?

当该方法无效或我实际上不想返回任何东西时,我一直强烈反对返回任何东西。如果最终遇到这种情况,我想重新考虑一下我的体系结构,因为它不应该发生。

我是完全错误/正确的还是这里有讨论空间?

if-statement coding-style return

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

Java比C快吗?

到目前为止我所听到的一切都是人们说Java通常比C慢,但有一些例外(比如涉及代码什么都不做).所以我出去测试它.我在0到999,999之间有一个100,000个整数的数组.我在C和java(在OS X上编译)中使用了一个双循环来将它们从最小到最大排序.

结果是Java通常在一半时间内完成.在使用不同阵列的5次运行中,Java占用大约17秒,而C占用大约32秒(包括从文件中分配和填充阵列的时间,两者都可以忽略不计).

那么什么会使Java代码比C运行得更快?是否有我遗漏的东西,或者我听不到的一些基础技术?

编辑:也不确定它是否重要,但我使用time命令计时,而不是任何自定义代码.例如:$time java SortArray

至于编译器选项,我现在无法访问该命令行,但它是OS X 10.10上的默认gcc选项:

gcc sortarray.c -o sortarray

我只是使用默认的javac来编译Java.

javac SortArray.java

C:

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

#define SIZE 32

int main()
{
    FILE* file = fopen("bigarray.txt", "r");
    int arraySize = 100000;
    int array[100000] = {};
    int i, j, temp;
    char inputBuffer[SIZE];
    for (i = 0; i < arraySize; i++) {
        fgets(inputBuffer, SIZE, file);
        array[i] = strtod(inputBuffer, NULL);
    }

    for (i = 0; i < arraySize; i++)
        for (j = i + 1; j …
Run Code Online (Sandbox Code Playgroud)

c java arrays sorting performance

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

在C中声明变量

我很难在C中声明我的变量.编译器在令牌之前显示消息"预期的构造函数析构函数或类型转换."我做错了什么?

#include <stdio.h>

int count =0;
int abc;
ABC; 
a = 19, b = 27, c = 3;

a = 4 + 5 * 3;
b = (4 +5) * 3;
c = 25 -(2 * (10 + (8 / 2)));

main {
   printf("Enter a value please\n");
   scanf("%d, , \n");
   return 0;
}
Run Code Online (Sandbox Code Playgroud)

c

-10
推荐指数
2
解决办法
124
查看次数

标签 统计

c ×3

performance ×2

arrays ×1

coding-style ×1

ctypes ×1

if-statement ×1

java ×1

python ×1

return ×1

sorting ×1

swig ×1