返回随机数而不是具体的 5.1
Posted
技术标签:
【中文标题】返回随机数而不是具体的 5.1【英文标题】:Returning random numbers instead of 5.1 to be specific 【发布时间】:2018-08-30 14:32:54 【问题描述】:以下是Bounding Phase 方法的代码,它返回限制的中点。但它没有将值返回给 main() 函数。 对出现问题的行进行了注释。
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
float func(float x)
float f = (pow(x,2) + (54 / x));
return f;
float bPhase(float x0, float delta)
float x1 , f0, f1, f2, a, b, mPt;
int k, p;
k = 0;
p = 0;
f0 = func(x0 - delta);
p++;
f1 = func(x0);
p++;
f2 = func(x0 + delta);
p++;
if(f0 <= f1 && f1 <= f2)
delta = -1 * delta;
else
delta = delta;
printf("%f %f %f\n", f0, f1, f2);
x1 = x0 + pow(2,k) * delta;
while(func(x1) < func(x0))
k++;
a = x0;
x0 = x1;
x1 = x1 + pow(2,k) * delta;
b = x1;
printf("%f %f %f\n", func(a),func(x0),func(b));
p++;
printf("Minimum lies between %.3f and %.3f", a, b);
printf("\nIteration no: %d\n", k+1);
printf("Total no. of function evaluations: %d\n", p);
mPt = ((a+b)/2.0);
printf("%f\n", mPt); //Here prints 5.1
return mPt; //Should return 5.1, but not returning
int main(void)
float x0, mPt;
float delta;
printf("Enter initial guess: "); // guess is .6
scanf("%f", &x0);
printf("Enter increment: "); // 0.5
scanf("%f", &delta);
bPhase(x0, delta);
printf("\n%f\n", mPt); //should print 5.1 but prints random
return 0;
函数 bPhase 没有返回任何内容。请帮忙。主函数未从 bPhase 函数接收 mPt 的值。 这里是新手。谢谢。
【问题讨论】:
bPhase(x0, delta);
-> mPt = bPhase(x0, delta);
【参考方案1】:
main
中有一个名为 mPt
的变量,bPhase
中有一个名为 mPt
的变量。这些不是同一个变量。不同的变量在不同的作用域中可能存在同名。
另外,当bPhase
返回时,您不会对返回值做任何事情。您需要将其分配给mPt
。然后你会看到你期望的值。
mPt = bPhase(x0, delta);
【讨论】:
【参考方案2】:您的main
函数中有一个名为mPt
的变量,但您没有将bPhase
返回的值分配给它,因此它未初始化。
这样做:
mPt = bPhase(x0, delta);
我还会阅读 C 的 scope rules,因为我的印象是您认为 bPhase
中的变量 mPt
与 main
中的变量 mPt
相同。
【讨论】:
以上是关于返回随机数而不是具体的 5.1的主要内容,如果未能解决你的问题,请参考以下文章
在C#中使用C/C++库的方法返回一个随机值,而不是上面的返回
汇编代码返回数组中的最小整数,而不是随机返回最后一个或倒数第二个数字
F.monotonically_increasing_id() 返回长随机数