http://www.sufeinet.com/plugin.php?id=keke_group

苏飞论坛

 找回密码
 马上注册

QQ登录

只需一步,快速开始

分布式系统框架(V2.0) 轻松承载百亿数据,千万流量!讨论专区 - 源码下载 - 官方教程

HttpHelper爬虫框架(V2.7-含.netcore) HttpHelper官方出品,爬虫框架讨论区 - 源码下载 - 在线测试和代码生成

HttpHelper爬虫类(V2.0) 开源的爬虫类,支持多种模式和属性 源码 - 代码生成器 - 讨论区 - 教程- 例子

查看: 2335|回复: 0

[总群] 我的db1=2.227691364683296E-34 转换后为什么result等于0

[复制链接]
发表于 2013-5-29 16:57:56 | 显示全部楼层 |阅读模式
♂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
所以只有自己写函数的计算方法



1. 开通SVIP会员,免费下载本站所有源码,不限次数据,不限时间
2. 加官方QQ群,加官方微信群获取更多资源和帮助
3. 找站长苏飞做网站、商城、CRM、小程序、App、爬虫相关、项目外包等点这里
您需要登录后才可以回帖 登录 | 马上注册

本版积分规则

QQ|手机版|小黑屋|手机版|联系我们|关于我们|广告合作|苏飞论坛 ( 豫ICP备18043678号-2)

GMT+8, 2024-4-28 07:19

© 2014-2021

快速回复 返回顶部 返回列表