一个新的printf
一个自己写的printf, 主要用于系统 printf 不能用的时候, 比如在窗口程序、多线程程序中. 可以重定位到控制台/终端或者内存缓冲区. 由于多线程程序(无论 windows 还是 linux)中不能用 printf("%f") 输出, 所以写了个这个.
字符串类 - 带KMP查找
一个字符串的类. 唯一值得用的是里面集成的 KMP 算法字符串查找和字符串比较功能, 我写 linux 程序时用它来分析命令行.
C++用堆排序
所有 N*log N 性能排序算法中性能最稳定的. 不过是不稳定排序算法. 使用方法: 构造一个 HeapSortNS::HeapSortHeap 类, 初始化时需要三个东西: 数组元素个数, key 的数组和要排序的数组, HeapSortNS::HeapSort 将按 key 从小到大排列. key 可以是任何类.
实数与文本互化子程序
文本和双精度实数的互化. 这次的代码是我用纯粹的 C 写的了, 我现在的代码中都用这个函数. 反正也不算资源分, 拿出来大家分享一下.
实数与文本转化子程序
实数与文本转化的子程序<br><br>函数声明如下:<br>void real2txt(char* text, float f, int width);<br>void real2txt(char* text, double f, int width);<br>void txt2real(char * text, float * f, int width);<br>void txt2real(char * text, double * f, int width);<br><br>编译及运行要求:支持 Intel 指令集,支持 C 与汇编混合编译。(如 Windows + VC)<br><br>缘起:我在 C 标准库里似乎没有找到文本转化为实数的程序。因为要用,只好自己编了一个。为了方便起见,我在程序中没有牵涉到科学记数法的处理。<br><br>效率:本着一切效率优先的原则,我用标准 C 与汇编语言 (Intel 8087 指令系统) 混合编程的方法。所有函数均进行过效率测试,结果如下:<br> 实数->文本:12 ~ 24 字节文本的转化耗费 1 ~ 2 kClk<br> 文本->实数:12 ~ 32 字节文本的转化耗费 0.8 ~ 3 kClk<br>测试平台是 Intel 迅驰 3,单位 kClk 是一千个 CPU 指令周期。相比之下,C 标准库函数 pow(a, b) 的 CPU 耗费是 0.5 kClk,而 sprintf(***,"%f",***) 的系统耗费则是 14 kClk。<br><br>问题:把文本转化成实数的问题似乎不是很大,但把实数转化成文本问题就大了:8087 中没有反对数指令!也就是说,pow(a, b) 必须自己算!我曾经使用过一种算法,即用多次开平方的方式来实现指数运算,但效率只有 pow(a, b) 的六分之一。最后实在无奈,我只要还是使用 pow(a, b) 来算指数。我甚至反汇编 pow(a, b),但没看懂算法,而且也没见代码中使用 fscale 这样的指令。<br>对数指令 fyl2x 的系统耗费一般在 0.180 kClk,相比之下反对数实在太慢了。怎么快速地算反对数这个问题我实在想不通,望大侠赐教!