【发布时间】:2014-11-12 04:51:07
【问题描述】:
我遇到了 C 中概率函数的双参数问题。
我有一个以双精度为参数的函数:
int binomrand(double p, int n)
{
int i;
int numevents = 0;
for(i = 0; i < n; i++)
{
numevents += bernoullirand(p);
}
return numevents;
}
我通过了 .85:
int numcoach = binomrand(.85,COACH_SEATS);
但是当我进入这个函数的那一刻,Xcode 显示 p 是这样的:
p double 5.2511106800094658E-315
相差至少 10^314 倍。这甚至发生在调用 bernoullirand 之前,所以我没有在此处包含该代码。
E:
因为它是相关的,这里是 binomrand 的 .h 声明:
int binomrand(float p, int n);
这显然是错误的,但我没想过要去看它。请注意,这是“float”而不是“double”。
当我在其 .c 文件中将函数从 float 更新为 double 时,我忽略了在其 .h 文件中这样做。多个回答者很快意识到了这一点。
【问题讨论】:
-
你能发布一个简短、完整的程序来演示这一点吗?包括任何必要的函数原型。
-
你在哪里调用函数,是来自另一个文件吗?在你调用它之前,你需要有一个
binomrand的函数原型,否则它会尝试传递一个 int 作为你的参数而不是一个 double。 -
谢谢你,JS1!从浮点数切换到双精度数时忘记更新头文件。
-
这就是为什么当你写 foo.c 和 foo.h 的时候,foo.c 应该做的第一件事是
#include "foo.h"。
标签: c type-conversion header-files