计算生辰八字五行属性的算法
计算生辰八字五行属性的算法
潘爱民
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;
}
计算生辰八字五行属性的算法相关推荐
- php 计算壬子,(14条消息)计算生辰八字五行属性的算法
计算生辰八字五行属性的算法 潘爱民 2013/1/26 缘起:几年前,小儿出生的几天之内,我需要为他起名字.人生难得接一两回这样的任务,更是格外珍惜.我调研了几种起名字的思路,最终确定按照五行阴阳平衡 ...
- 使用Java计算生辰八字五行属性
使用Java计算生辰八字五行属性 五行八字基本要素 天干地支表 天干地支对应编号 计算公元后某年的干支 干支纪月法 干支纪日法 十二时辰表 十二时辰纪日对照表 五行干支对照表 五行八字Java实现代码 ...
- php数据分析引擎,PHP数据分析引擎计算余弦相似度算法示例
php 的 PHP数据分析引擎计算余弦相似度算法示例 本文实例讲述了PHP数据分析引擎计算余弦相似度算法.分享给大家供大家参考,具体如下: 关于余弦相似度的相关介绍可参考百度百科: /** * 数据分 ...
- 腾讯高性能图计算框架Plato及其算法应用
作者:hunteryu,腾讯 WXG 后台开发工程师 Plato 简介 腾讯高性能图计算框架 Plato 图作为一种表示和分析大数据的有效方法,已成为社交网络.推荐系统.网络安全.文本检索和生物医疗等 ...
- 基于实时计算Flink的机器学习算法平台及场景介绍
作者:高旸(吾与),阿里巴巴高级技术专家 1. 前言 随着互联网"人口红利"的"消耗殆尽",基于"T+1"或者离线计算的机器学习平台及推荐系 ...
- 多个点 最远距离 java_Java实现的计算最大下标距离算法示例
本文实例讲述了Java实现的计算最大下标距离算法.分享给大家供大家参考,具体如下: 题目描述 给定一个整形数组,找出最大下标距离j−i, 当且A[i] < A[j] 和 i < j 解法 ...
- 演化计算(蚁群算法、粒子群算法、遗传算法、演化规则......)
演化计算(蚁群算法.粒子群算法.遗传算法.演化规则......) 1.概念 2.传统算法和演化计算 3.一般步骤 1.概念 演化计算主要用于解决预测优化问题.由于演化计算利用一组解求解,所以这一组 ...
- 分页计算总页数算法:总页数=(总数-1)/每页数量+1----总页数=(总数+每页数量-1)/每页数量
分页计算总页数算法:总页数=(总数-1)/每页数量+1 总页数=(总数+每页数量-1)/每页数量 int totalPageNum = (totalRecord - 1) / pageSize + 1 ...
- 计算机算法讲解的ppt,智能计算几种经典算法解析.ppt
<智能计算几种经典算法解析.ppt>由会员分享,可在线阅读,更多相关<智能计算几种经典算法解析.ppt(20页珍藏版)>请在装配图网上搜索. 1.智能计算几种经典算法解析,制作 ...
- QCryptographicHash实现哈希值计算,支持多种算法
介绍 多看看Qt core模块会发现很多惊喜呀,里面包含的类很多涉及到很多方面的功能实现 先附上所有core类:Qt Core,再直接给出QCryptographicHash的帮助:QCryptogr ...
最新文章
- DCNv2 windows编译 2021ok
- java 批量处理 示例_Java异常处理教程(包含示例和最佳实践)
- mysql binary blob区别_SQL中binary 和 varbinary的区别 blob
- [vue] 你知道v-model的原理吗?说说看
- java面试下_Java面试宝典(下)
- ruby学习笔记(3)--语法层面的先见之明
- cuda支持 java_cuda运行时错误(48):没有内核映像可用于在设备上执行
- hdu 4496 并查集
- php oracle 大字段,php oracle数据库clob和nclob字段
- Powershell 磁盘使用空间监控,并使用dbmail发送邮件
- 海思HI3536 H265解码处理器简介
- C#毕业设计——基于C#+ASP.NET+SQL Server的酒店入住信息管理系统设计与实现(毕业论文+程序源码)——酒店入住信息管理系统
- 论计算机基础学科的重要性
- 基于SSM的商城管理系统
- AI笔记: 数学基础之方向导数的计算和梯度
- Qt之文件保存的技巧
- openlayers中使用rBush(R树)来存放要素等信息,本文修改了一点其中的rbush源码中的demo,使用canvas画出了insert和delete操作(建立树和删除树中数据)
- c语言百文百鸡问题答案,算法的举例(。。。
- midi键盘接电脑实现电子琴功能
- FASS-K8S云原生全闪存储解决方案