计算生辰八字五行属性的算法

潘爱民

2013/1/26

缘起:几年前,小儿出生的几天之内,我需要为他起名字。人生难得接一两回这样的任务,更是格外珍惜。我调研了几种起名字的思路,最终确定按照五行阴阳平衡的道理来确定生辰八字的五行属性,然后选取恰当的字。

说明:本文描述的算法是根据Internet上的资料整理而得到,并非我原创,但个别地方我做过修改。其中经验值的出处已无法找到。

算法的高度足够,我是坐在飞机上写下这一算法描述的,上万米高空俯瞰大地,感觉到一种静默的平衡J。在过去几年中,我用这一算法测算过十多个生辰八字,也碰到过一两个极端的情形,与现实中的表现比较吻合。因此,我相信这算法的结果有参考意义。但是,因使用该算法引起的任何意外事故,我概不负责,请谨慎使用。

算法的过程如下所述:

1.       根据出生年月日和时辰,确定八个字,即生辰八字。

查万年历(比如www.nongli.net),确定前六个字。比如1968年8月8日,查到的结果是:

戊申辛酉壬寅

这六个字分别是年份的天干、地支,月份的天干、地支,和日子的天干、地支。

接下来确定时辰的天干和地支,查下表:

出生
钟点

时辰地支

日干(即第5个字)

甲 己

乙 庚

丙 辛

丁 壬

戊 癸

23-1

1-3

3-5

5-7

7-9

9-11

11-13

13-15

15-17

17-19

19-21

21-23

甲子

乙丑

丙寅

丁卯

戊辰

己巳

庚午

辛未

壬申

癸酉

甲戌

乙亥

丙子

丁丑

戊寅

己卯

庚辰

辛巳

壬午

癸未

甲申

乙酉

丙戌

丁亥

戊子

己丑

庚寅

辛卯

壬辰

癸巳

甲午

乙未

丙申

丁酉

戊戌

己亥

庚子

辛丑

壬寅

癸卯

甲辰

己巳

丙午

丁未

戊申

己酉

庚戌

辛亥

壬子

癸丑

甲寅

乙卯

丙辰

丁巳

戊午

己未

庚申

辛酉

壬戌

癸亥

首先根据出生钟点找到相应的行数,再根据第5个字(日干),在右边5列中定位到相应的列,即可得到时辰的天干、地支,即第7、8两个字。譬如,1968年8月8日8点钟,在“7-9”这一行,“丁壬”这一列,得到时辰的干支为“甲辰”,所以,最终的八字为:

戊申辛酉壬寅甲辰

2.       计算八字的五行属性。

首先,每个天干和地支都有对应的五行属性,如下面两表所示:

天干属性:

天干

属性

天干

属性

天干

属性

地支属性:

地支

属性

地支

属性

地支

属性

接下来,计算五行“金木水火土”的强度值。对于五行中的每一行,其强度值包括两部分:

l  天干强度:即八字中的4个天干,若其五行属性恰好是这一行,那么就有相应的贡献值,可查表如下:

生月\天干

子月

1.2

1.2

1.0

1.0

1.0

1.0

1.0

1.0

1.2

1.2

丑月

1.06

1.06

1.0

1.0

1.1

1.1

1.14

1.14

1.1

1.1

寅月

1.14

1.14

1.2

1.2

1.06

1.06

1.0

1.0

1.0

1.0

卯月

1.2

1.2

1.2

1.2

1.0

1.0

1.0

1.0

1.0

1.0

辰月

1.1

1.1

1.06

1.06

1.1

1.1

1.1

1.1

1.04

1.04

巳月

1.0

1.0

1.14

1.14

1.14

1.14

1.06

1.06

1.06

1.06

午月

1.0

1.0

1.2

1.2

1.2

1.2

1.0

1.0

1.0

1.0

未月

1.04

1.04

1.1

1.1

1.16

1.16

1.1

1.1

1.0

1.0

申月

1.06

1.06

1.0

1.0

1.0

1.0

1.14

1.14

1.2

1.2

酉月

1.0

1.0

1.0

1.0

1.0

1.0

1.2

1.2

1.2

1.2

戌月

1.0

1.0

1.04

1.04

1.14

1.14

1.16

1.16

1.06

1.06

亥月

1.2

1.2

1.0

1.0

1.0

1.0

1.0

1.0

1.14

1.14

l  地支强度:即八字中的4个地支,它们可能会藏了这一五行对应的天干,比如,“丑”藏了“癸、辛、己”,而癸、辛、己的五行属性分别是水、金、土。所以,地支“丑”对水、金、土都有强度贡献,而强度值的大小则取决于相应的月份。下面的表格涵盖了地支所藏的五行强度值。

地支

支藏

月支(即第6个字)

1.2

1.1

1.0

1.0

1.04

1.06

1.0

1.0

1.2

1.2

1.06

1.14

0.36

0.33

0.3

0.3

0.312

0.318

0.3

0.3

0.36

0.36

0.318

0.342

0.2

0.228

0.2

0.2

0.23

0.212

0.2

0.22

0.228

0.248

0.232

0.2

0.5

0.55

0.53

0.5

0.55

0.57

0.6

0.58

0.5

0.5

0.57

0.5

0.3

0.3

0.36

0.36

0.318

0.342

0.36

0.33

0.3

0.3

0.342

0.318

0.84

0.742

0.798

0.84

0.77

0.7

0.7

0.728

0.742

0.7

0.7

0.84

1.2

1.06

1.14

1.2

1.1

1.0

1.0

1.04

1.06

1.0

1.0

1.2

0.36

0.318

0.342

0.36

0.33

0.3

0.3

0.312

0.318

0.3

0.3

0.36

0.24

0.22

0.2

0.2

0.208

0.2

0.2

0.2

0.24

0.24

0.212

0.228

0.5

0.55

0.53

0.5

0.55

0.6

0.6

0.58

0.5

0.5

0.57

0.5

0.3

0.342

0.3

0.3

0.33

0.3

0.3

0.33

0.342

0.36

0.348

0.3

0.7

0.7

0.84

0.84

0.742

0.84

0.84

0.798

0.7

0.7

0.728

0.742

1.0

1.0

1.2

1.2

1.06

1.14

1.2

1.1

1.0

1.0

1.04

1.06

0.3

0.3

0.36

0.36

0.318

0.342

0.36

0.33

0.3

0.3

0.312

0.318

0.24

0.212

0.228

0.24

0.22

0.2

0.2

0.208

0.212

0.2

0.2

0.24

0.5

0.55

0.53

0.5

0.55

0.57

0.6

0.58

0.5

0.5

0.57

0.5

0.36

0.33

0.3

0.3

0.312

0.318

0.3

0.3

0.36

0.36

0.318

0.342

0.7

0.798

0.7

0.7

0.77

0.742

0.7

0.77

0.798

0.84

0.812

0.7

1.0

1.14

1.0

1.0

1.1

1.06

1.0

1.1

1.14

1.2

1.16

1.0

0.3

0.342

0.3

0.3

0.33

0.318

0.3

0.33

0.342

0.36

0.348

0.3

0.2

0.2

0.24

0.24

0.212

0.228

0.24

0.22

0.2

0.2

0.208

0.212

0.5

0.55

0.53

0.5

0.55

0.57

0.6

0.58

0.5

0.5

0.57

0.5

0.36

0.318

0.342

0.36

0.33

0.3

0.3

0.312

0.318

0.3

0.3

0.36

0.84

0.77

0.7

0.7

0.728

0.742

0.7

0.7

0.84

0.84

0.724

0.798

回到前面的例子,八字“戊申辛酉壬寅甲辰”,查以上两表,可以得到五行强度为:

金:0.84 (年支藏庚) + 1.2 (月干) + 1.2 (月支藏辛) = 3.24

木:0.7 (日支藏甲) + 1.0 (时干) + 0.3 (时支藏乙) = 2.0

水:0.36 (年支藏壬) + 1.2 (日干) + 0.24 (时支藏癸) = 1.8

火:0.3 (日支藏丙) = 0.3

土:1.0 (年干) + 0.5 (时支藏戊) = 1.5

3.       给出起名指示。

首先确定八字的命里属性。只需查日干的五行属性,即代表了该八字的五行属性。譬如“戊申辛酉壬寅甲辰”的日干“壬”的属性为水,故该八字对应的命里属性为水。

再计算同类和异类的强度值。所谓同类是指,该八字的五行属性,以及生该五行属性的那个属性,譬如八字的五行属性为水,则水和金合起来称为同类,其他三个:木、火和土合起来称为异类。

五行的相生关系为:金生水,水生木,木生火,火生土,土生金。

得到了同类和异类的强度值以后,一个基本的判断是,若两者的数值比较接近,则说明该八字比较平衡,也暗示人生平顺;若两者数值相差较大(比如,大于1,甚至大于2),则说明五行不平衡,可以通过名字来弥补,或者将来找对象时候通过婚姻来补平。

因此,得到同类和异类数值以后,如何确定“用神”或“喜神”,或者,如何在名字中补平,需要一点点人脑智能,目前尚未量化到算法或程序中。回到前面的例子:

日干为壬,属水,故命属水

“同类”数值:5.04

“异类”数值:3.8

“同类”比“异类”数值大,日主强,以火为用神。宜补火。

最后,定下怎么补五行属性以后,剩下就是挑字了,这可以自由发挥了。康熙字典上每个字都有五行属性,可以在Internet上查到。

附上代码:

文件BaziEval.cpp

//BaziEval.cpp : Defines the entry point for the console application.

//

#include"stdafx.h"

#include<windows.h>

#include<iostream>

usingnamespace std;

void Usage()

{

cout << "Usage:\tBaziEval.exe -q <生辰八字中之前六字> -t hh" << endl;

cout <<"\tBaziEval.exe -e <生辰八字>" << endl;

return;

}

boolCheckBazi(_TCHAR *bazi);

_TCHAR *ComputeTimeGan(_TCHAR *bazi, int hour);

_TCHAR *EvalBazi(_TCHAR *bazi);

int_tmain(int argc, _TCHAR* argv[])

{

_TCHAR *subCmd, *paraStr;

if (argc != 5 && argc !=3) {

Usage();

return 0;

}

subCmd = argv[1];

paraStr = argv[2];

if (argc ==5) {

// Parsing the part of"-q <生辰八字中之前六字>"

if (!(wcslen(subCmd)==1&& subCmd[0] == 'q' || wcslen(subCmd)==2 && subCmd[0]=='-'&& subCmd[1]=='q')) {

Usage();

return 0;

}

if (wcslen(paraStr)!=6 ||!CheckBazi(paraStr)) {

cout <<"-q后面须跟上生辰日的干支,可以查询万年历,比如在线版本 http://www.nongli.net/" << endl;

Usage();

return 0;

}

// Parsing the part of"-t hh:mm"

subCmd = argv[3];

paraStr = argv[4];

if (!(wcslen(subCmd)==1&& subCmd[0] == 't' || wcslen(subCmd)==2 && subCmd[0]=='-'&& subCmd[1]=='t')) {

Usage();

return 0;

}

int hour = -1;

swscanf(paraStr,L"%d", &hour);

if (hour <0 || hour>23) {

cout <<"Error: 时辰参数不正确,应为0~23之间的一个整点数。" << endl;

Usage();

return 0;

}

_TCHAR * result =ComputeTimeGan(argv[2], hour);

if (result == 0) {

cout << "查询不成功!"<< endl;

} else {

char tmpBuf[128];

WideCharToMultiByte( CP_ACP, 0, result, -1,tmpBuf, 127, NULL, NULL );

cout << "查询八字的结果是:"<< tmpBuf << endl;

cout << "接下来您可以用-e命令测算此八字的五行平衡信息。" << endl;

}

return 0;

}

if (argc ==3) {

// Parsingthe part of "-q <生辰八字中之前六字>"

if (!(wcslen(subCmd)==1&& subCmd[0] == 'e' || wcslen(subCmd)==2 && subCmd[0]=='-'&& subCmd[1]=='e')) {

Usage();

return 0;

}

if (wcslen(paraStr)!=8 ||!CheckBazi(paraStr)) {

cout <<"-e后面须跟上生辰八字" << endl;

Usage();

return 0;

}

_TCHAR *result =EvalBazi(paraStr);

if (result == 0) {

cout << "测算不成功,另请高明!"<< endl;

} else {

char tmpBuf[1024];

WideCharToMultiByte( CP_ACP, 0, result, -1,tmpBuf, 1024, NULL, NULL );

cout <<"\n此八字的五行平衡分析结果如下:\n\n" << tmpBuf << endl;

}

return 0;

}

Usage();

return 0;

}

文件BaziAlgorithm.cpp

#include "stdafx.h"

#include <windows.h>

const _TCHAR *TianGan = L"甲乙丙丁戊己庚辛壬癸";

const _TCHAR *DiZhi = L"子丑寅卯辰巳午未申酉戌亥";

bool CheckBazi(_TCHAR *bazi)

{

intbaziLen;

inti,j;

baziLen= wcslen(bazi);

if(baziLen != 6 && baziLen != 8 ) return false;

for(i = 0; i < baziLen;) {

_TCHARch = bazi[i];

for(j = 0; j < 10; j++)

if(ch == TianGan[j]) break;

if(j >= 10) return false;

i++;

ch= bazi[i];

for(j = 0; j < 12; j++)

if(ch == DiZhi[j]) break;

if(j >= 12) return false;

i++;

}

returntrue;

}

/*

根据出生日子的天干,通过下表来查算时辰干支:

时辰干支查算表

时间时辰                             五行纪日干支

甲己     乙庚     丙辛     丁壬     戊癸

23-01 子/水           甲子     丙子     戊子     庚子     壬子

01-03 丑/土           乙丑     丁丑     己丑     辛丑     癸丑

03-05 寅/木           丙寅     戊寅     庚寅     壬寅     甲寅

05-07 卯/木           丁卯     己卯     辛卯     癸卯     乙卯

07-09 辰/土           戊辰     庚辰     壬辰     甲辰     丙辰

09-11 巳/火           己巳     辛巳     癸巳     己巳     丁巳

11-13 午/火           庚午     壬午     甲午     丙午     戊午

13-15 未/土           辛未     癸未     乙未     丁未     己未

15-17 申/金           壬申     甲申     丙申     戊申     庚申

17-19 酉/金           癸酉     乙酉     丁酉     己酉     辛酉

19-21 戊/土           甲戌     丙戌     戊戌     庚戌     壬戌

21-23 亥/水           乙亥     丁亥     己亥     辛亥     癸亥

*/

const _TCHAR * cTimeGanZhi_Table[12][5] =

{

{L"甲子",L"丙子", L"戊子", L"庚子", L"壬子"},

{L"乙丑",L"丁丑", L"己丑", L"辛丑", L"癸丑"},

{L"丙寅",L"戊寅", L"庚寅", L"壬寅", L"甲寅"},

{L"丁卯",L"己卯", L"辛卯", L"癸卯", L"乙卯"},

{L"戊辰",L"庚辰", L"壬辰", L"甲辰", L"丙辰"},

{L"己巳",L"辛巳", L"癸巳", L"己巳", L"丁巳"},

{L"庚午", L"壬午",L"甲午", L"丙午", L"戊午"},

{L"辛未",L"癸未", L"乙未", L"丁未", L"己未"},

{L"壬申",L"甲申", L"丙申", L"戊申", L"庚申"},

{L"癸酉",L"乙酉", L"丁酉", L"己酉", L"辛酉"},

{L"甲戌",L"丙戌", L"戊戌", L"庚戌", L"壬戌"},

{L"乙亥",L"丁亥", L"己亥", L"辛亥", L"癸亥"}

};

static _TCHAR sBuf[128];        // 用作八字结果缓冲区

// 根据出生年月日的干支计算时辰干支

// 输入参数:bazi,年月日的干支,即八字中的前六个字

// 输入参数:hour,出生时间的小时数,-1~22

// 输出结果:八字字符串,Unicode编码

_TCHAR * ComputeTimeGan(_TCHAR *bazi, inthour)

{

_TCHARdayGan = bazi[4];

intindexX, indexY;

inti;

for(i = 0; i < 10; i++)

if(dayGan == TianGan[i]) break;

if(i >= 10) return 0;

indexX= i;

if(indexX >=5) indexX -= 5;

indexY= (hour +1)/2;

wcscpy(sBuf,bazi);

wcscat(sBuf,cTimeGanZhi_Table[indexY][indexX]);

returnsBuf;

}

/*

十二月份天干强度表

生月\四柱天干        甲              乙              丙              丁              戊              己              庚              辛              壬              癸

子月                            1.2             1.2             1.0             1.0             1.0             1.0             1.0             1.0             1.2             1.2

丑月                            1.06 1.06 1.0             1.0             1.1             1.1             1.14 1.14 1.1             1.1

寅月                            1.14 1.14 1.2             1.2             1.06 1.06 1.0             1.0             1.0             1.0

卯月                            1.2             1.2             1.2             1.2             1.0             1.0             1.0             1.0             1.0             1.0

辰月                            1.1             1.1             1.06 1.06 1.1             1.1             1.1             1.1             1.04 1.04

巳月                            1.0             1.0             1.14 1.14 1.14 1.14 1.06 1.06 1.06 1.06

午月                            1.0             1.0             1.2             1.2             1.2             1.2             1.0             1.0             1.0             1.0

未月                            1.04 1.04 1.1             1.1             1.16 1.16 1.1             1.1             1.0             1.0

申月                            1.06 1.06 1.0             1.0             1.0             1.0             1.14 1.14 1.2             1.2

酉月                            1.0             1.0             1.0             1.0             1.0             1.0             1.2             1.2             1.2             1.2

戌月                            1.0             1.0             1.04 1.04 1.14 1.14 1.16 1.16 1.06 1.06

亥月                            1.2             1.2             1.0             1.0             1.0             1.0             1.0             1.0             1.14 1.14

*/

double TianGan_Strength [12][10] =

{

{1.2, 1.2,  1.0,  1.0,  1.0,  1.0,  1.0,  1.0,  1.2,  1.2},

{1.06,        1.06,         1.0,  1.0,  1.1,  1.1,  1.14,         1.14,         1.1,  1.1},

{1.14,        1.14,         1.2,  1.2,  1.06,         1.06,         1.0,  1.0,  1.0,  1.0},

{1.2, 1.2,  1.2,  1.2,  1.0,  1.0,  1.0,  1.0,  1.0,  1.0},

{1.1, 1.1,  1.06,         1.06,         1.1,  1.1,  1.1,  1.1,  1.04,         1.04},

{1.0, 1.0,  1.14,         1.14,         1.14,         1.14,         1.06,         1.06,         1.06,         1.06},

{1.0, 1.0,  1.2,  1.2,  1.2,  1.2,  1.0,  1.0,  1.0,  1.0},

{1.04,        1.04,         1.1,  1.1,  1.16,         1.16,         1.1,  1.1,  1.0,  1.0},

{1.06,        1.06,         1.0,  1.0,  1.0,  1.0,  1.14,         1.14,         1.2,  1.2},

{1.0, 1.0,  1.0,  1.0,  1.0,  1.0,  1.2,  1.2,  1.2,  1.2},

{1.0, 1.0,  1.04,         1.04,         1.14,         1.14,         1.16,         1.16,         1.06,         1.06},

{1.2, 1.2,  1.0,  1.0,  1.0,  1.0,  1.0,  1.0,  1.14,         1.14}

};

/*

十二月份地支强度表

生月       子月         丑月         寅月         卯月         辰月         巳月         午月         未月         申月         酉月         戌月         亥月

地支         支藏

子              癸                       1.2             1.1             1.0             1.0             1.04 1.06 1.0             1.0             1.2             1.2             1.06 1.14

丑              癸                       0.36 0.33 0.3             0.3             0.312        0.318        0.3             0.3             0.36 0.36 0.318        0.342

丑              辛                       0.2             0.228        0.2             0.2             0.23 0.212        0.2             0.22 0.228        0.248        0.232        0.2

丑              己                       0.5             0.55 0.53 0.5             0.55 0.57 0.6             0.58 0.5             0.5             0.57 0.5

寅              丙                       0.3             0.3             0.36 0.36 0.318        0.342        0.36 0.33 0.3             0.3             0.342        0.318

寅              甲                       0.84 0.742        0.798        0.84 0.77 0.7             0.7             0.728        0.742        0.7             0.7             0.84

卯              乙                       1.2             1.06 1.14 1.2             1.1             1.0             1.0             1.04 1.06 1.0             1.0             1.2

辰              乙                       0.36 0.318        0.342        0.36 0.33 0.3             0.3             0.312        0.318        0.3             0.3             0.36

辰              癸                       0.24 0.22 0.2             0.2             0.208        0.2             0.2             0.2             0.24 0.24 0.212        0.228

辰              戊                       0.5             0.55 0.53 0.5             0.55 0.6             0.6             0.58 0.5             0.5             0.57 0.5

巳              庚                       0.3             0.342        0.3             0.3             0.33 0.3             0.3             0.33 0.342        0.36 0.348        0.3

巳              丙                       0.7             0.7             0.84 0.84 0.742        0.84 0.84 0.798        0.7             0.7             0.728        0.742

午              丁                       1.0             1.0             1.2             1.2             1.06 1.14 1.2             1.1             1.0             1.0             1.04 1.06

未              丁                       0.3             0.3             0.36 0.36 0.318        0.342        0.36 0.33 0.3             0.3             0.312        0.318

未              乙                       0.24 0.212        0.228        0.24 0.22 0.2             0.2             0.208        0.212        0.2             0.2             0.24

未              己                       0.5             0.55 0.53 0.5             0.55 0.57 0.6             0.58 0.5             0.5             0.57 0.5

申              壬                       0.36 0.33 0.3             0.3             0.312        0.318        0.3             0.3             0.36 0.36 0.318        0.342

申              庚                       0.7             0.798        0.7             0.7             0.77 0.742        0.7             0.77 0.798        0.84 0.812        0.7

酉              辛                       1.0             1.14 1.0             1.0             1.1             1.06 1.0             1.1             1.14 1.2             1.16 1.0

戌              辛                       0.3             0.342        0.3             0.3             0.33 0.318        0.3             0.33 0.342        0.36 0.348        0.3

戌              丁                       0.2             0.2             0.24 0.24 0.212        0.228        0.24 0.22 0.2             0.2             0.208        0.212

戌              戊                       0.5             0.55 0.53 0.5             0.55 0.57 0.6             0.58 0.5             0.5             0.57 0.5

亥              甲                       0.36 0.318        0.342        0.36 0.33 0.3             0.3             0.312        0.318        0.3             0.3             0.36

亥              壬                        0.84 0.77 0.7             0.7             0.728        0.742        0.7             0.7             0.84 0.84 0.724        0.798

*/

struct ZISTRENGTH {

_TCHARdiZhi;

_TCHARzhiCang;

doublestrength[12];

};

ZISTRENGTHDiZhi_Strength [] =

{

{L'子', L'癸', {1.2,1.1, 1.0, 1.0,        1.04, 1.06, 1.0,1.0, 1.2, 1.2, 1.06, 1.14}},

{L'丑', L'癸', {0.36,0.33, 0.3, 0.3, 0.312, 0.318, 0.3, 0.3, 0.36, 0.36, 0.318, 0.342}},

{L'丑', L'辛', {0.2,0.228, 0.2, 0.2, 0.23, 0.212, 0.2,         0.22,0.228, 0.248, 0.232, 0.2}},

{L'丑', L'己', {0.5,0.55, 0.53, 0.5, 0.55, 0.57, 0.6, 0.58, 0.5, 0.5, 0.57, 0.5}},

{L'寅', L'丙', {0.3,0.3, 0.36, 0.36, 0.318, 0.342, 0.36, 0.33, 0.3, 0.3, 0.342, 0.318}},

{L'寅', L'甲', {0.84,0.742, 0.798, 0.84, 0.77, 0.7, 0.7, 0.728, 0.742, 0.7, 0.7, 0.84}},

{L'卯', L'乙', {1.2,1.06, 1.14, 1.2, 1.1, 1.0, 1.0, 1.04, 1.06, 1.0, 1.0, 1.2}},

{L'辰', L'乙', {0.36,0.318, 0.342, 0.36, 0.33, 0.3, 0.3, 0.312, 0.318, 0.3, 0.3, 0.36}},

{L'辰', L'癸', {0.24,0.22,  0.2, 0.2, 0.208, 0.2, 0.2, 0.2,0.24, 0.24, 0.212, 0.228}},

{L'辰', L'戊', {0.5,0.55, 0.53, 0.5, 0.55, 0.6, 0.6, 0.58, 0.5, 0.5, 0.57, 0.5}},

{L'巳', L'庚', {0.3,0.342, 0.3, 0.3, 0.33, 0.3, 0.3, 0.33, 0.342, 0.36, 0.348, 0.3}},

{L'巳', L'丙', {0.7,0.7, 0.84, 0.84, 0.742, 0.84, 0.84, 0.798, 0.7, 0.7, 0.728, 0.742}},

{L'午', L'丁', {1.0,1.0, 1.2, 1.2, 1.06, 1.14, 1.2, 1.1, 1.0, 1.0, 1.04, 1.06}},

{L'未', L'丁', {0.3,0.3, 0.36, 0.36, 0.318, 0.342, 0.36, 0.33, 0.3, 0.3, 0.312, 0.318}},

{L'未', L'乙', {0.24,0.212, 0.228, 0.24, 0.22, 0.2, 0.2, 0.208, 0.212, 0.2, 0.2, 0.24}},

{L'未', L'己', {0.5,0.55, 0.53, 0.5, 0.55, 0.57, 0.6, 0.58, 0.5, 0.5, 0.57, 0.5}},

{L'申', L'壬', {0.36,0.33, 0.3, 0.3, 0.312, 0.318, 0.3, 0.3, 0.36, 0.36, 0.318, 0.342}},

{L'申', L'庚', {0.7,0.798, 0.7, 0.7, 0.77, 0.742, 0.7, 0.77, 0.798, 0.84, 0.812, 0.7}},

{L'酉', L'辛', {1.0,1.14, 1.0, 1.0, 1.1, 1.06, 1.0, 1.1, 1.14, 1.2, 1.16, 1.0}},

{L'戌', L'辛', {0.3,0.342, 0.3, 0.3, 0.33, 0.318, 0.3, 0.33, 0.342, 0.36, 0.348, 0.3}},

{L'戌', L'丁', {0.2,0.2, 0.24, 0.24, 0.212, 0.228, 0.24, 0.22, 0.2, 0.2, 0.208, 0.212}},

{L'戌', L'戊', {0.5,0.55, 0.53, 0.5, 0.55, 0.57, 0.6, 0.58, 0.5, 0.5, 0.57, 0.5}},

{L'亥', L'甲', {0.36,0.318, 0.342, 0.36, 0.33, 0.3, 0.3, 0.312, 0.318, 0.3, 0.3, 0.36}},

{L'亥', L'壬', {0.84,0.77, 0.7, 0.7, 0.728, 0.742, 0.7, 0.7, 0.84, 0.84, 0.724, 0.798}}

};

/*

金 --- 0

木 --- 1

水 --- 2

火 --- 3

土 --- 4

*/

_TCHAR WuXingTable[5] = {L'金', L'木', L'水', L'火', L'土' };

/*

天干地支的五行属性表

天干: 甲-木、乙-木、丙-火、丁-火、戊-土、己-土、庚-金、辛-金、壬-水、癸-水

地支:子-水、丑-土、寅-木、卯-木、辰-土、巳-火、午-火、未-土、申-金、酉-金、戌-土、亥-水

*/

int TianGan_WuXingProp[10] = {1, 1, 3, 3, 4,4, 0, 0, 2, 2};

int DiZhi_WuXingProp[12] = {2, 4, 1, 1, 4,3, 3, 4, 0, 0, 4, 2};

int GenerationSourceTable[5] = {4, 2, 0, 1,3};

int ComputeGanIndex(_TCHAR gan)

{

inti;

for(i=0; i < 10; i++)

if(TianGan[i] == gan) break;

if(i >= 10) return -1;

returni;

}

int ComputeZhiIndex(_TCHAR zhi)

{

inti;

for(i=0; i < 12; i++)

if(DiZhi[i] == zhi) break;

if(i >= 12) return -1;

returni;

}

static _TCHAR sResultBuf[1024];   // 用作八字测算结果返回的字符缓冲区

// 根据八字计算五行平衡

// 输入参数:bazi,年月日时的干支,即俗称的八字

// 输出结果:分析结果字符串,Unicode编码

_TCHAR * EvalBazi(_TCHAR *bazi)

{

doublestrengthResult[5];

intmonthIndex = ComputeZhiIndex(bazi[3]);

if(monthIndex == -1) goto ERROR_CASE;

wcscpy(sResultBuf,bazi);

wcscat(sResultBuf,L"\n\n");

for(int wuXing = 0; wuXing < 5; wuXing++) {

doublevalue1 = 0.0, value2 = 0.0;

inti;

//扫描4个天干

for(i  = 0; i <8; i+=2) {

TCHARgan = bazi[i];

intindex = ComputeGanIndex(gan);

if(index == -1) goto ERROR_CASE;

if(TianGan_WuXingProp[index] == wuXing)

value1+= TianGan_Strength[monthIndex][index];

}

//扫描支藏

for(i  = 1; i <8; i+=2) {

TCHARzhi = bazi[i];

for(intj = 0; j < sizeof (DiZhi_Strength)/sizeof (DiZhi_Strength[0]); j++) {

if(DiZhi_Strength[j].diZhi == zhi) {

intzhiCangIndex = ComputeGanIndex(DiZhi_Strength[j].zhiCang);

if(zhiCangIndex == -1) goto ERROR_CASE;

if(TianGan_WuXingProp[zhiCangIndex] == wuXing) {

value2+= DiZhi_Strength[j].strength[monthIndex];

break;

}

}

}

}

strengthResult[wuXing]= value1 + value2;

//输出一行计算结果

{

_TCHARpreStr[128];

chartmpBuf[128];

_TCHARtmpWBuf[256];

sprintf(tmpBuf,":%.3f + %.3f = %.3f\n", (float)value1, (float)value2,(float)(value1+value2));

MultiByteToWideChar(CP_ACP, 0, tmpBuf, strlen(tmpBuf)+1,

tmpWBuf,sizeof(tmpWBuf)/sizeof(_TCHAR) );

wcscpy(preStr,L"金:\t");

preStr[0]= WuXingTable[wuXing];

wcscat(sResultBuf,preStr);

wcscat(sResultBuf,tmpWBuf);

}

}

//根据日干求命里属性

intfateProp, srcProp;

{

_TCHARtmpWBuf[256];

fateProp= TianGan_WuXingProp[ComputeGanIndex(bazi[4])];

if(fateProp == -1) goto ERROR_CASE;

wcscpy(tmpWBuf,L"\n命属金\n\n");

tmpWBuf[3]= WuXingTable[fateProp];

wcscat(sResultBuf,tmpWBuf);

}

//求同类和异类的强度值

srcProp= GenerationSourceTable[fateProp];

{

_TCHARpreStr[128];

chartmpBuf[128];

_TCHARtmpWBuf[256];

doubletongLei = strengthResult[fateProp] + strengthResult[srcProp];

doubleyiLei = 0.0;

for(inti = 0; i < 5; i ++) yiLei += strengthResult[i];

yiLei-= tongLei;

sprintf(tmpBuf,"%.3f+ %.3f = %.3f\n", (float)strengthResult[fateProp],(float)strengthResult[srcProp],

(float)tongLei);

MultiByteToWideChar(CP_ACP, 0, tmpBuf, strlen(tmpBuf)+1,

tmpWBuf,sizeof(tmpWBuf)/sizeof(_TCHAR) );

wcscpy(preStr,L"同类:金+金,");

preStr[3]= WuXingTable[fateProp];

preStr[5]= WuXingTable[srcProp];

wcscat(sResultBuf,preStr);

wcscat(sResultBuf,tmpWBuf);

sprintf(tmpBuf,"%.3f\n", (float)yiLei);

MultiByteToWideChar(CP_ACP, 0, tmpBuf, strlen(tmpBuf)+1,

tmpWBuf,sizeof(tmpWBuf)/sizeof(_TCHAR) );

wcscat(sResultBuf,L"异类:总和为 ");

wcscat(sResultBuf,tmpWBuf);

}

returnsResultBuf;

ERROR_CASE:

return0;

}

计算生辰八字五行属性的算法相关推荐

  1. php 计算壬子,(14条消息)计算生辰八字五行属性的算法

    计算生辰八字五行属性的算法 潘爱民 2013/1/26 缘起:几年前,小儿出生的几天之内,我需要为他起名字.人生难得接一两回这样的任务,更是格外珍惜.我调研了几种起名字的思路,最终确定按照五行阴阳平衡 ...

  2. 使用Java计算生辰八字五行属性

    使用Java计算生辰八字五行属性 五行八字基本要素 天干地支表 天干地支对应编号 计算公元后某年的干支 干支纪月法 干支纪日法 十二时辰表 十二时辰纪日对照表 五行干支对照表 五行八字Java实现代码 ...

  3. php数据分析引擎,PHP数据分析引擎计算余弦相似度算法示例

    php 的 PHP数据分析引擎计算余弦相似度算法示例 本文实例讲述了PHP数据分析引擎计算余弦相似度算法.分享给大家供大家参考,具体如下: 关于余弦相似度的相关介绍可参考百度百科: /** * 数据分 ...

  4. 腾讯高性能图计算框架Plato及其算法应用

    作者:hunteryu,腾讯 WXG 后台开发工程师 Plato 简介 腾讯高性能图计算框架 Plato 图作为一种表示和分析大数据的有效方法,已成为社交网络.推荐系统.网络安全.文本检索和生物医疗等 ...

  5. 基于实时计算Flink的机器学习算法平台及场景介绍

    作者:高旸(吾与),阿里巴巴高级技术专家 1. 前言 随着互联网"人口红利"的"消耗殆尽",基于"T+1"或者离线计算的机器学习平台及推荐系 ...

  6. 多个点 最远距离 java_Java实现的计算最大下标距离算法示例

    本文实例讲述了Java实现的计算最大下标距离算法.分享给大家供大家参考,具体如下: 题目描述 给定一个整形数组,找出最大下标距离j−i, 当且A[i] < A[j] 和 i < j 解法 ...

  7. 演化计算(蚁群算法、粒子群算法、遗传算法、演化规则......)

    演化计算(蚁群算法.粒子群算法.遗传算法.演化规则......) 1.概念 2.传统算法和演化计算 3.一般步骤 1.概念   演化计算主要用于解决预测优化问题.由于演化计算利用一组解求解,所以这一组 ...

  8. 分页计算总页数算法:总页数=(总数-1)/每页数量+1----总页数=(总数+每页数量-1)/每页数量

    分页计算总页数算法:总页数=(总数-1)/每页数量+1 总页数=(总数+每页数量-1)/每页数量 int totalPageNum = (totalRecord - 1) / pageSize + 1 ...

  9. 计算机算法讲解的ppt,智能计算几种经典算法解析.ppt

    <智能计算几种经典算法解析.ppt>由会员分享,可在线阅读,更多相关<智能计算几种经典算法解析.ppt(20页珍藏版)>请在装配图网上搜索. 1.智能计算几种经典算法解析,制作 ...

  10. QCryptographicHash实现哈希值计算,支持多种算法

    介绍 多看看Qt core模块会发现很多惊喜呀,里面包含的类很多涉及到很多方面的功能实现 先附上所有core类:Qt Core,再直接给出QCryptographicHash的帮助:QCryptogr ...

最新文章

  1. DCNv2 windows编译 2021ok
  2. java 批量处理 示例_Java异常处理教程(包含示例和最佳实践)
  3. mysql binary blob区别_SQL中binary 和 varbinary的区别 blob
  4. [vue] 你知道v-model的原理吗?说说看
  5. java面试下_Java面试宝典(下)
  6. ruby学习笔记(3)--语法层面的先见之明
  7. cuda支持 java_cuda运行时错误(48):没有内核映像可用于在设备上执行
  8. hdu 4496 并查集
  9. php oracle 大字段,php oracle数据库clob和nclob字段
  10. Powershell 磁盘使用空间监控,并使用dbmail发送邮件
  11. 海思HI3536 H265解码处理器简介
  12. C#毕业设计——基于C#+ASP.NET+SQL Server的酒店入住信息管理系统设计与实现(毕业论文+程序源码)——酒店入住信息管理系统
  13. 论计算机基础学科的重要性
  14. 基于SSM的商城管理系统
  15. AI笔记: 数学基础之方向导数的计算和梯度
  16. Qt之文件保存的技巧
  17. openlayers中使用rBush(R树)来存放要素等信息,本文修改了一点其中的rbush源码中的demo,使用canvas画出了insert和delete操作(建立树和删除树中数据)
  18. c语言百文百鸡问题答案,算法的举例(。。。
  19. midi键盘接电脑实现电子琴功能
  20. FASS-K8S云原生全闪存储解决方案

热门文章

  1. UVa 10696 - f91
  2. 杨凡老师谈怎样背好单词
  3. Centos7部署Mantis
  4. vue 选项卡切换
  5. 计算机A类会议 icip,计算机视觉|中国计算机学会推荐国际学术刊物/会议
  6. 文件 MD5 SHA1 SHA256 SHA512 校验码生成工具 V1.3
  7. Base64 在线编码解码
  8. 什么是客户端与服务器端
  9. Science Robotics | 美国造“自我意识”机器人?还能自我复制?
  10. 怎样将多个视频快速分割成两段或者多段