小编gal*_*ois的帖子

IEEE浮点异常 - 为什么?

我正在制作一个简单的函数来重现Secant方法,我认为我有一些精确的问题.

首先,这是函数(以及调用它的main方法,以及与它一起使用的测试函数):

double secant_method(double(*f)(double), double a, double b){
    double c;
    for (int i = 0; i < 10; i++){
        c = a - f(a) * (a - b) / (f(a) - f(b));
        b = a; a = c;
    }
    return c;
}

typedef double (*func)(double);

//test function - x^3 + 4x - 10
double test(double x){
    return (x*x*x) + (4*x) - 10;
}

int main(){
    func f = &test;
    double ans;

    ans = secant_method(f, 0, 2);

    printf("\nRoot found:\t%.*g\n", …
Run Code Online (Sandbox Code Playgroud)

c math floating-point precision ieee-754

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

在同一行上使用 malloc 创建两个数组

在 C/C++ 中,您可以通过以下语法将一组变量初始化为相同的值: a = b = c = 1;

这会起作用malloc吗?IE 类似的东西:

char *a, *b;
a = b = malloc(SOME_SIZE * sizeof(char));
Run Code Online (Sandbox Code Playgroud)

这会创建两个相同大小的数组,但每个数组都有自己的内存吗?或者它会将两个数组分配到地址空间中的同一个位置?

c c++ memory arrays malloc

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

传递给C++函数的数组给出了不同的长度

我想首先说 - 我对"幕后"发生的事情感兴趣导致这个问题,因为我正在盲目修复代码.也许C++标准或我不熟悉的东西决定了它的原因:-)

无论如何...

我试图将3个数组传递A, B, C给一个函数,该函数将合并AB存储结果C.

功能声明: void merge(int* a, int* b, int* c)

通过main():

int A[] = {1,2,3,4};
int B[] = {6,7,8,9};
int* C;  //this could be wrong, btw!

merge(A, B, C);
Run Code Online (Sandbox Code Playgroud)

问题1. 奇怪的是main(),如果我打印结果sizeof(A)/sizeof(A[0]),它给出了数组的"长度"的正确结果4- 和B的相同的东西.但是当我将数组传递给函数时,我尝试通过相同的方法再次计算大小,但我得到2两个数组的结果.第一行merge():

void merge(int* a, int* b, int* c)
{
    int sizeA = sizeof(a)/sizeof(a[0]);
    int sizeB = sizeof(b)/sizeof(b[0]);
    int totalsize = sizeA + …
Run Code Online (Sandbox Code Playgroud)

c++ arrays

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

如何在makefile中包含-std = c ++ 11和-lpthread?

我在这个答案中尝试了这个建议,但它适用于GCC并且无论如何都没有帮助.

我想#include <thread>在一个文件中,所以我有一个make文件如下:

OBJS    = clitest.o Sources/NClient.o
CC      = g++
DEBUG   = -g
CFLAGS  = -Wall -c $(DEBUG)
LFLAGS  = -Wall $(DEBUG)

clitest: $(OBJS)
    $(CC) $(LFLAGS) $(OBJS) -o clitest
Run Code Online (Sandbox Code Playgroud)

我应该在哪里包括-std=c++11-lpthread在这?我已经尝试了几乎所有的组合,但是当我运行时我仍然遇到这个错误make:

/usr/include/c++/4.8.3/bits/c++0x_warning.h:32:2: error: #error This file requires compiler and library support for the ISO C++ 2011 standard. This support is currently experimental, and must be enabled with the -std=c++11 or -std=gnu++11 compiler options.

我相信这是它正在运行的命令?

[jaska@localhost NClient]make
g++    -c -o clitest.o clitest.cpp …
Run Code Online (Sandbox Code Playgroud)

c++ makefile g++ pthreads c++11

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

C - 有没有办法用比特检查检查一个数字是否等于1?

这只是一个感兴趣的问题 - 我不确定它实际上是如何适用的.无论如何 - 是否可以使用位检查来查看数字是否等于1?

c binary bit-manipulation bit

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

在三元运算中设置for循环

只是为了踢和咯咯笑,是否有可能在三元操作中放置一个'for'循环?

这是用于查找数字是否为素数的代码:

int isPrime(int number){
 int i, root = sqrt(number)+1; 

 if(number==1||!(number)||!(number&1)) return 0;            
 if(number==2)                         return 1;
 for(i=3;i<root;i+=2) if(!(number%i))  return 0;

 return 1;
Run Code Online (Sandbox Code Playgroud)

}

这是我"思想"的开始:

 int isPrime(int number){
      return number&1 || !(number&1) || number==2 ? 0:1;
 }
Run Code Online (Sandbox Code Playgroud)

可以在那里添加for循环检查吗?

c loops for-loop ternary

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

错误:未知类型名称'GTKWidget'

我正在运行GTK教程中的"hello-world"代码:

#include <gtk/gtk.h>

int main(int argc, char* argv[])
{
    GTKWidget *window;
    gtk_init(&argc, &argv);

    window = gtk_window_new(GTK_WINDOW_TOPLEVEL);
    gtk_widget_show(window);

    gtk_main();

    return 0;
}
Run Code Online (Sandbox Code Playgroud)

当我使用以下方法编译它时,我收到此错误:

$ gcc base.c -o base `pkg-config --cflags --libs gtk+-2.0`

base.c: In function ‘main’:
base.c:5:2: error: unknown type name ‘GTKWidget’
  GTKWidget *window;
Run Code Online (Sandbox Code Playgroud)

似乎问题不是gtk.h没有包含在内,而是说GTKWidget不是一个东西?

c gtk gnome

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