c - 如何正确使用 exp 和 sqrt 属性
问题描述
- 使用双精度 - 使用 sqrt() 和指数函数 exp() - 使用 * 计算平方 - 不要使用 pow()
我得到的价值观与我所期望的完全不同。我尝试让它们全部签名,但它没有改变任何东西,我尝试用 12 位小数打印,但似乎没有任何效果。我已经链接了数学库并定义了它。
double normal(double x, double sigma, double mu)
{
double func = 1.0/(sigma * sqrt(2.0*M_PI));
double raise = 1.0/2.0*((x-mu)/sigma);
double func1 = func * exp(raise);
double comp_func = (func1 * func1);
return comp_func;
}
int main(void)
{
// create two constant variables for μ and σ
const double sigma, mu;
//create a variable for x - only dynamic variable in equation
unsigned int x;
//create a variable for N values of x to use for loop
int no_x;
//scaniing value into mu
printf("Enter mean u: ");
scanf("%lf", &mu);
//scanning value into sigma
printf("Enter standard deviation: ");
scanf("%lf", &sigma);
//if sigma = 0 then exit
if(sigma == 0)
{
printf("error you entered: 0");
exit(0);
}
//storing number of x values in no_x
printf("Number of x values: ");
scanf("%d", &no_x);
//the for loop where i am calling function normal N times
for(int i = 1; i <= no_x; i++)
{
//printing i for the counter in prompted x values
printf("x value %d : ", i);
// scanning in x
scanf("%lf", &x);
x = normal(x,sigma,mu);
printf("f(x) = : %lf.12", x);
printf("\n");
}
return 0;
}
C:>.\a.exe 输入平均值 u:3.489 输入标准偏差:1.203 x 值的数量:3 x 值 1:3.4 f(X) = 0.330716549275 x 值 2:-3.4 f(X) = 0.000000025104 x 值3: 4 f(X) = 0.303015189801
但这就是我收到的
C:\Csource>a.exe 输入平均值 u:3.489 输入标准偏差:1.203 x 值的数量:3 x 值 1:3.4 f(x) = :15086080.000000 x 值 2:-3.4 f(x) = :15086080.000000 x值 3 : 4 f(x) = : 1610612736.000000
解决方案
插入这些行:
#include <math.h>
#include <stdio.h>
#include <stdlib.h>
改变:
const double sigma, mu;
至:
double sigma, mu;
改变:
unsigned int x;
至:
double x;
将函数的定义替换为normal
:
double normal(double x, double sigma, double mu)
{
double func = 1.0/(sigma * sqrt(2.0*M_PI));
double t = (x-mu)/sigma;
return func * exp(-t*t/2);
}
推荐阅读
- java - 带有 nativeQuery=false 的 Spring 存储库和 DATA_FORMAT
- angular - NgRx 调度动作生效并采取一个(?)
- javascript - 如果没有 JavaScript 中的 .then(),承诺可能会过早地被垃圾收集
- matlab - MVGC 工具箱文档中的演示代码不适用于 R2018b
- javascript - 本地/会话存储 - 暂停视频并从它停止的地方播放 - JavaScript
- android - sharedUserId 是否需要多个应用程序的相同签名密钥库?
- javascript - 如何修改指令中的事件负载?
- c++ - boost::asio 绞合线程不能立即工作
- python - 如何将嵌套字典列表转换为 pandas DataFrame?
- jquery - 如何在 Rails 中自定义活动管理视图?