C语言表示欧拉常数算法,计算li(x)的两个级数的C语言实现
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
// 素数定理li(x)计算值
#include
#include
#include
#include
#include "my_data.h"
typedef long double extended; // 定义扩展精度类型
// 欧拉常数 γ = 0.57721566490153286060651209...
const extended GAMMA = 0.5772156649015328606L;
const extended __li2 = 1.045163780117492785L;
extended fact(uint32);
extended Ei(extended,long,long *); //标准算法
extended li(extended,long,long *); //校对算法
void liDemo()
{
clock_t t1,t2;
long i, c1, c2;
long v1 = -100L;
extended d1 = 10.0L;
extended e1,e2,u1;
for (i = 1; i <= 200; i++)
{
u1 = logl(d1);
t2 = clock();
e1 = Ei(u1,v1,&c1);
e2 = li(d1,v1,&c2);
t1 = clock();
printf("10^%3ld = %.18Le %.18Le",i,e1,e2);
printf(" %4ld %4ld %2ld\n",c1,c2,t1-t2);
d1 *= 10.0L;
}
} // 演示素数定理li(10^N)计算值(N<=200)
int main()
{
liDemo();
system("PAUSE");
return 0;
}
extended fact(uint32 n)
{
if (n == 0) return 1.0L;
else return n * fact(n - 1);
} // 计算n的浮点阶乘
extended Ei(extended u, long v, long * c)
// Ei(u) := γ + lnu + sum{}
// sum {1 to inf} u^n / n*n!
{
extended d0 = powl(10,v);
extended d1 = logl(u);
extended e0,e1,e2,f0;
*c = 0;e0 = 0.0L;
do {
f0 = e0; *c += 1;
e1 = expl(*c * d1);
e2 = *c * fact(*c);
e0 += e1 / e2;
} while ((e0 != f0) &&
(fabsl(e0 - f0) >= d0));
return GAMMA + d1 + e0;
} // 计算Ei(u)即li(e^u),存在误差
extended li(extended x, long v, long * c)
{
// li(x) := γ + ln(ln(x)) + sqrt(x) * expr1
// expr1 := sum{n:=1_to_inf}(-1^n-1)ln(x)^n
// /n!2^n-1*sum{k:=1_to_floor((n-1)/2)}1/(2k+1)
extended d0 = powl(10,v);
extended d1 = logl(logl(x));
extended e0,e1,e2,e3,f0;
*c = 0; e0 = 0.0L;
do
{
f0 = e0; *c += 1;
e1 = expl(*c * d1);
if (!(*c & 1)) e1 = -e1;
e2 = fact(*c)*powl(2,*c-1);
e3 = 0.0; long k;
for (k = 0; k <= (*c-1)>>1; k++)
{
e3 += (extended)1/((k<<1)+1);
}
e0 += e1 / e2 * e3;
} while ((e0 != f0) &&
(fabsl(e0 - f0) >= d0));
return GAMMA + d1 + e0 * sqrtl(x);
} //计算li(x)的一个更快的级数,存在误差
C语言表示欧拉常数算法,计算li(x)的两个级数的C语言实现相关推荐
- C语言随笔小算法:创建双向链表
C语言随笔小算法:创建双向链表 双向链表两个指针域!head定住,tail移动! 代码: #include "stdlib.h" #include "stdio.h&qu ...
- c语言编程实现dsa算法,C语言实现DSA算法(不包括质数生成)
1.头文件部分 #include #include #include 2.判断大数是不是0或1 参见<C语言实现RSA算法> 3.大数加减乘除幂模 参见<C语言实现RSA算法> ...
- R语言使用log函数计算对数、自定义指定底数
R语言使用log函数计算对数.自定义指定底数 目录 R语言使用log函数计算对数.自定义指定底数 R语言是解决什么问题的? R语言使用log函数计算对数.自定义指定底数 安利一个R语言的优秀博主及其C ...
- R语言使用choose函数计算排列组合:组合数(输入两个参数、combination)
R语言使用choose函数计算排列组合:组合数(输入两个参数.combination) 目录 R语言使用choose函数计算组合数(输入两个参数.combination) R 语言特点 R语言使用ch ...
- C语言DP备忘计算指数N的斐波那契级数的算法(附完整源码)
C语言DP备忘计算指数N的斐波那契级数的算法 C语言DP备忘计算指数N的斐波那契级数的算法完整源码(定义,实现,main函数测试) C语言DP备忘计算指数N的斐波那契级数的算法完整源码(定义,实现,m ...
- 设树采用孩子兄弟表示法存放.用类c语言设计算法计算树的高度.,(数据结构课程设计分类题目.doc...
(数据结构课程设计分类题目 线性表 顺序表: 1.设有一元素为整数的线性表L=(a1,a2,a3,-,an),存放在一维数组A[N]中,设计一个算法,以表中an作为参考元素,将该表分为左.右两部分,其 ...
- c语言龙贝格积分法实验报告,数值作业:龙贝格算法计算积分C语言实现
数值作业:龙贝格算法计算积分C语言实现 数值作业:龙贝格算法计算积分C语言实现 根据Romberg算法计算定积分,和变步长的Simpson算法的输入都一样.算法基本分析:输入a,b(积分上下限),n为 ...
- 秦九邵算法计算多项式(C语言实现)
秦九邵算法计算多项式程序(C语言实现) #include<iostream> #include<cstdio> using namespace std; double algr ...
- 配电网络n节点潮流计算c语言,配电网络潮流计算实用算法
摘要:利用两种可行的辐射形配电网络潮流计算方法来计算配电网络的潮流分布,着重解决了实际计算中出现的难点,并用C语言编制计算程序,对具体算例进行分析. 关键词:配电网络 配电网潮流算法 1 配电网潮流计 ...
- python 基础代谢率计算_0.数据结构(python语言) 基本概念 算法的代价及度量!!!...
先看思维导图: *思维导图有点简陋,本着循循渐进的思想,这小节的知识大多只做了解即可. *重点在于算法的代价及度量!!!查找资料务必弄清楚. 零.四个基本概念 问题:一个具体的需求 问题实例:针对问题 ...
最新文章
- jQuery 插入元素
- Python基础第27天
- Rails5 Controller Document
- Windows PE导出表编程2(重组导出表函数地址)
- Java 基础面试题,java基础面试笔试题
- 【Java】java JMX之ObjectName
- 使用“管道”与“应用程序生命周期”重构:可插拔模块
- CCF农产品价格预测-复赛rank2代码公布
- CB Loss:基于有效样本的类别不平衡损失
- OpenGL.Vertex Array Object (VAO).
- label怎么换行 vb_VB中怎么换行 | 学步园
- 二进制转格雷码c语言编程,格雷码简介及格雷码与二进制的转换程序
- 组策略设置计算机计划任务,使用组策略配置域中任务计划
- php 简繁体,php实现简体转繁体
- 微信小程序tab切换功能的实现
- ALOHA协议(纯ALOHA协议:想发就发;时隙ALOHA协议:控制想发就发的随意性)
- 自行车、电动自行车、儿童自行车做16 CFR 1512测试报告
- ThreeJs基础代码段(五)飘扬的旗帜
- 益寿延年,这13种食物真是宝,能延寿10年,赶紧收藏!
- requests爬取IT橘子
热门文章
- 工作十年的程序员,却拿着毕业三年的工资,再不开窍就真晚了!
- 【EXLIBRIS】#小词旮旯# 002 Rape
- Sentinel控制台实时监控空白
- mysql 如何去掉毫秒_mysql 如何去掉毫秒值
- atom芯片和服务器芯片冲突,Intel Atom处理器惊天BUG撂倒大波队友:迟来的修复!...
- React中实现防抖功能的两种方式
- 防拍照防截屏,360企业安全云推“屏幕水印”助企业破解信息安全难题
- JAVA实现饭店点菜系统详解
- 微信提醒对方账号异常应该怎么办
- 在blog中添加attachments功能 (修改系统Control)