« | August 2025 | » | 日 | 一 | 二 | 三 | 四 | 五 | 六 | | | | | | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | | | | | | | |
|
公告 |
本站技术贴除标明为“原创”的之外,其余均为网上转载,文中我会尽量保留原作者姓名,若有侵权请与我联系,我将第一时间做出修改。谢谢!
——既瑜 |
统计 |
blog名称:★既瑜★ 日志总数:183 评论数量:636 留言数量:-25 访问次数:1406065 建立时间:2005年3月12日 |
OICQ:215768265
njucs2001@hotmail.com
erichoo1982@gmail.com |
|
W3CHINA Blog首页 管理页面 写新日志 退出
[【技术文档】]一个让人发狂的PI求解C程序 |
一个让人发狂的PI求解C程序
作者: 张桂权
long a=10000, b, c=2800, d, e, f[2801], g;
main{ for(;b-c;) f[b++]=a/5; for(;d=0,g=c*2;c-=14,printf("%.4d",e+d/a),e=d%a) for(b=c; d+=f[b]*a, f[b]=d%--g, d/=g--, --b; d*=b); scanf("%s");}
简短的4行代码,就可以精确计算机出800位的PI(圆周率)值。 实在太震撼人心了。这样的程序也能运行,竟然还能能完成这样让人难以置信的任务,真是太神了。 真让人百思不知其解了。不知道它是采用了哪一个级数公式,收敛速度如此之快?在《程序员》第十一期中还专门提供了这个程序源码。喜欢挑战的朋友请来试一试哦?
这是某一年Th
|
阅读全文(10338) | 回复(1) | 编辑 | 精华 | 删除 |
[【技术文档】][转]利用内核对象----互斥量实现应用程序只运行一个实例 |
#include <windows.h> int main(int argc, char* argv[]) { HANDLE h=CreateMutex(NULL, FALSE,"QI_HONGLIANG_210"); if(GetLastError()==ERROR_ALREADY_EXISTS) { printf("There exist a app aleadly"); getchar(); return (0); } printf("Hello World!\n"); getchar(); return 0; }
|
阅读全文(6088) | 回复(-1) | 编辑 | 精华 | 删除 |
[【技术文档】][转]如何正确的计算文件收发进度 |
学习Winsock编程,用TCP协议收发文件是必不可少的一个实践环节,而计算收发百分比的一行代码,很多人都写不对。
假设我们用DWORD(unsigned long)来表示文件长度,则长度的最大值是232-1,也就是4GB。虽然Win32 API能够返回两个DWORD表示长度,但是为了简便,我们还是原意接收4GB的人为限制。以下我们的讨论基于这个前提。
通常我们会使用一个DWORD表示length,一个DWORD表示pos。为了避免使用浮点数,很多人会这样写
DWORD percent = pos * 100 / length;
之所以把100乘在前面,是因为这个除法是整数除法,不这样的话,percent将永远是0。这样以来,pos*100便有了一个限制,它不能溢出,也就是不能大于232-1。这样,如果我们传送大于4GB/100=40MB的文件,这个percent就会计算错误。
显然不能先做乘法,但还要不使用浮
|
阅读全文(5370) | 回复(0) | 编辑 | 精华 | 删除 |
[【技术文档】]双机调试VC程序 |
对VC进行程序调试时,除了常规的单机调试方式外, 也可以双机调试,即一台计算机作为主机,显示调试器窗口,而另一台计算机作为客户机,显示被调试程序的输出值。在VC里称这种方式为远程调试,但这种调
试方法与常规方法有少许不同,需要进行必要的设置。步骤如下:
1.配置主机 先将两个计算机通过网络链接起来,并从Buil
|
阅读全文(11617) | 回复(20) | 编辑 | 精华 | 删除 |
[【技术文档】][转]分治法优化大整数乘法 C++实现 |
上大学算法分析实验课的内容.关于利用分治法大整数乘法.还没有解决大整数的存储方式,应该是要利用一维数组来解决.所以目前只是5位数的运算没有问题.程序不是很健全,但是算法的核心部分应该是已经都在这里了.
VC++6.0下测试通过.
#include <iostream.h> #include <math.h>
long mult(long x,long y,int n); int num(long x);
void main() //主函数 { long x,y; cout<<"input x and y:"<<endl; cin>>x>>y; cout<<mult(x,y,num(x))<<endl; }
long mult(long x,long y,int
|
阅读全文(26940) | 回复(8) | 编辑 | 精华 | 删除 |
[【技术文档】]浮点数值的内存结构 |
所有的C/C++编译器都是按照IEEE(国际电子电器工程师协会)制定的IEEE 浮点数表示法来进行运算的。这种结构是一种科学表示法,用符号(正或负)、指数和尾数来表示,底数被确定为2,也就是说是把一个浮点数表示为尾数乘以2的指数次方再加上符号。下面来看一下具体的规格:
符号位
指数位
小数部分
指数偏移量
单精度浮点数
1 位[31]
8位 [30-23]
23位 [22-00] |
阅读全文(13690) | 回复(4) | 编辑 | 精华 | 删除 |
[【技术文档】][转]双链表实现大整数的加法与乘法[VC++] |
设计的思想主要是通过双链表来实现的.利用双链表的节点存储每位的数字,利用前驱进行对上一个位数的使用.用后继来连接后面的节点.通过对"+"号和"*"号的重载实现对大整数的加和乘.理论上可以实现N多位的运算,只要你的机器内存够大...程序的重点在于运算符的重载.
本程序主要由三个文件构成:
BigInteger.h 包涵了对节点的结构定义,以及类BigInteger的定义.
BigInteger.cpp 包涵了BigInteger类里面成员函数的具体内容.
main.cpp 主函数...
//BigInteger.h
struct Node //定义了节点的结构 { char Num; Node *Prev,*Next;
|
阅读全文(9362) | 回复(1) | 编辑 | 精华 | 删除 |
[【趣味文摘】]拜占廷将军问题[转] |
拜占廷将军问题
这个问题是在1982年由Lamport, Shostak, Pease提出,后少人问津。为了利于对“拜占廷将军”问题原意的理解和避免曲解,把英文解释奉上: Byzantine General Problem ——The problem of reaching a consensus among distributed units if some of them give misleading answers. The original problem concerns generals plotting a coup. Some generals lie about whether they will support a particular plan and what other generals told them. What percentage of liars can a decision making algorithm tolerate and still correctly determine
|
阅读全文(9229) | 回复(0) | 编辑 | 精华 | 删除 |
|