- 积分
- 40165
- 好友
- 记录
- 主题
- 帖子
- 听众
- 收听
|
♂tangshun() 16:43:07
我的db1=2.227691364683296E-34
转换后为什么result等于0
♂[北京]-Ro4ters() 16:43:51
Math.Round 四舍五入了.
♂tangshun() 16:44:34
GetNormSDistValue是个算正太函数值的方法
♂tangshun() 16:47:16
他怎么会四舍五入成0了
小亮15824930696() 16:48:26
精度问题
小亮15824930696() 16:48:48
你都 E-34 这是要逆天么
♂[北京]-Ro4ters() 16:49:39
-34 不搞成0啊.难道还能搞成正的?
♂tangshun() 16:49:42
Convert.ToString(Math.Round(Q, 10));
♂tangshun() 16:50:03
我用这样的转 但是转了后就成0了
♂[北京]-Ro4ters() 16:50:27
db1=2.227691364683296E-34
♂tangshun() 16:50:38
这个数是计算标准正态数
♂tangshun() 16:50:41
算出来的
♂tangshun() 16:51:00
///
/// 计算标准正态数(jisuanbiaozhunzhengtaishu)
///
/// 需要计算标准正态数值(xuyaojisuanbiaozzhengtaishuzhi)
/// 返回计算结果(fanhuijisuanjieguo)
private double GetNormSDistValue(double NormSDistValue)
{
int S = 2;
double Q = 0;
double b = NormSDistValue;
while (true)
{
double a = b - S;
int M = 1, N = 1, k = 1, m = 1;
double ep, I, h;
ep = 0.000000000001;
h = b - a;
I = h * (f(a) + f(b)) / 2;
double[,] T = new double[5000, 5000];
T[1, 1] = I;
while (1 > 0)
{
N = (int)Math.Pow(2, m - 1);
if (N > 5000)
{
MessageBox.Show("请缩小精度再计算!");
break;
}
else
{
h = h / 2;
I = I / 2;
for (int i = 1; i <= N; i++)
I = I + h * f(a + (2 * i - 1) * h);
T[m + 1, 1] = I;
M = 2 * N;
k = 1;
while (M > 1)
{
T[m + 1, k + 1] = (Math.Pow(4, k) * T[m + 1, k] - T[m, k]) / (Math.Pow(4, k) - 1);
M = M / 2;
k = k + 1;
}
if (Math.Abs(T[k, k] - T[k - 1, k - 1]) < ep)
break;
m = m + 1;
}
}
I = T[k, k];
Q = Q + I;
if (Math.Abs(I) < ep)
break;
b = a; S = 2 * S;
}
return Q; ;
} ///
/// 计算标准正态数(jisuanbiaozhunzhengtaishu)
///
/// 需要计算标准正态数值(xuyaojisuanbiaozzhengtaishuzhi)
/// 返回计算结果(fanhuijisuanjieguo)
private double GetNormSDistValue(double NormSDistValue)
{
int S = 2;
double Q = 0;
double b = NormSDistValue;
while (true)
{
double a = b - S;
int M = 1, N = 1, k = 1, m = 1;
double ep, I, h;
ep = 0.000000000001;
h = b - a;
I = h * (f(a) + f(b)) / 2;
double[,] T = new double[5000, 5000];
T[1, 1] = I;
while (1 > 0)
{
N = (int)Math.Pow(2, m - 1);
if (N > 5000)
{
MessageBox.Show("请缩小精度再计算!");
break;
}
else
{
h = h / 2;
I = I / 2;
for (int i = 1; i <= N; i++)
I = I + h * f(a + (2 * i - 1) * h);
T[m + 1, 1] = I;
M = 2 * N;
k = 1;
while (M > 1)
{
T[m + 1, k + 1] = (Math.Pow(4, k) * T[m + 1, k] - T[m, k]) / (Math.Pow(4, k) - 1);
M = M / 2;
k = k + 1;
}
if (Math.Abs(T[k, k] - T[k - 1, k - 1]) < ep)
break;
m = m + 1;
}
}
I = T[k, k];
Q = Q + I;
if (Math.Abs(I) < ep)
break;
b = a; S = 2 * S;
}
return Q; ;
}
小亮15824930696() 16:51:01
先放大再缩小吧
♂tangshun() 16:51:35
怎么放啊 不会卡在这里了
小亮15824930696() 16:51:36
先放大 再缩小
♂tangshun() 16:52:25
等说清楚点么
♂残阳雨雪() 16:52:41
再搞验证码识别?
小亮15824930696() 16:53:22
先将运算数值放大到精度范围内运算之后再缩小回实际值
♂tangshun() 16:53:51
但是在程序里面没有这个函数 我就写了这个函数的计算方法
♂tangshun() 16:53:53
Excel里面有这个函数
♂tangshun() 16:54:32
本来说在程序里直接调用excel的函数 但是考虑在服务器上不可能装excel
♂tangshun() 16:54:44
所以只有自己写函数的计算方法
|
|