随机数起卦,为什么不能用随机数起卦
如何用手机摇个六爻?
上一篇文章对古时候的大衍筮法进行了介绍,其实在古代也已经大量普及铜钱摇卦法了。然后在现代,我们可以使用硬币摇卦,如果时间紧,也可以手机或者电脑自动起卦。有一句调侃的语言“遇事不决量子力学”,量子力学的特性之一就是随机,拿硬币摇卦呢也是也是一种随机事件。利用周易预测的第一步是起卦,梅花易可以用时间方位等各种条件起卦,但每次只有一个动爻,导致4096个卦里面只能用到384卦,其他卦出现不了。所以还是钱币手摇是最好的。三个硬币放在两手手心,合拢后摇晃几下然后置于桌面上,有1元5角等文字的一面朝上称为“字”有一朵花的一面朝上称为“背”或者“花”。一字两花记为阴爻--一花两字记为阳爻—三字记为老阴 x三花记为老阳 o如此六次,排卦顺序是从下往上(从初爻要上爻,第一次摇得的为初爻)就得到一个卦。然后把卦装好。排盘装卦可以用口诀手排或者用手机排盘,以小程序“东方六爻”为例,如图:根据手摇的阴阳选择相应爻位选好后点击“起卦”按钮摇好后排盘的卦象除了手摇起卦,手机电脑均支持自动起卦或者模拟摇卦,自动起卦很简单,点一下“自动起卦”按钮就完成了。模拟摇卦稍微多几步手脚,每点两次只能完成一爻,起一个卦要点12次按钮,根据每次点击之间的间隔不同会产生不同的随机数。不过手机电脑的随机数起卦都是用的伪随机数,就是通过算法产生的一系列数据,在统计学上看起来是随机的,但只要有相同的随机数种子,总是会产生相同的数列。常用的一种高效产生伪随机数的算法线性同余方法(LCG),但LCG产生的随机数周期不是很长,一般也就几十亿次以后就会重复。复杂一点的伪随机数算法还有“梅森旋转法”,产生的伪随机数周期长达2的19936次方。那电脑能产生真随机数吗?有的,比如酷睿3代及以后的CPU带有利用热噪声的真随机数功能。比如东方六爻电脑版本是支持酷睿的硬件真随机数,启动时会自动检测cpu型号,如果不支持真随机数的,那么改为使用梅森旋转法来产生伪随机数起卦。支持CPU真随机数学会了起卦排盘以后,后续我们会逐步讲一讲断卦的基本知识。
六爻数字起卦准吗
六爻数字起卦是准的,理论上哪种起卦方式都是准的,关键要程序正确,解卦正确。一般六爻起卦,通过金钱起卦的比较多,简单、方便,而且结果也准确,过程不容易出错。
真随机数的定义是什么
真随机数一般都是相对于数组而言,真随机数就是没有规律的数,你不能预见其下一个数值是多少,真随机数是个诡异的东西,一个源于物理现象得到的真随机数组一经公开就不再是真随机数组了,因为得到数组的人都可以知道下一个数是什么。以往大家有个共识,就是计算机不能产生真随机数,其实这是对计算机认识不够造成的,计算机有多种产生随机数的方法,这里仅举一例:最常用的C语言中有些函数的特点是每次调用它执行时间不一样,也就是执行时间有一定的随机性,利用此特性我们可以得到所需要的随机数。这些函数有Beep(0,0),SetWindowText(NULL),MessageBeep(MB_ICONQUESTION)等,其它语言的函数也有类似情况是肯定的。我们只要连续调用此类函数,监测其执行时间,处理执行时间就可以达到目的。但函数的执行时间都是很短暂的,用一般测量时间的方法都太粗糙了,必须自己设计度量方法。每个计算机都有其工作频率称为主频,与之相对应的是时钟周期,做一个函数读取计算机运行以来的时钟周期,用函数运行时计算机所经历的周期数来度量时间;测量一下当前的周期数,让函数运行,再测量一下当前的周期数,两个周期数的差值再减去一个本底值就代表了函数运行时间,如此做多个循环就可以大量采集运行时间了,处理运行时间数组得到随机数组。且看实验数据:Beep(0,0)函数的运行时间115636,114283,114899,115030,114488,114350,114866,115132,114317,114757放在字数组里则有 50100,48747,49363,49494,48952,48814,49330,49596,48781,49221放在字节数组里则有 180,107,211,86,56,174,178,188,141,69显然放到16位的字数组里效果不好,这是因为函数运行时间只比16位的最大值大0.7倍左右。但放到8位数组里效果不错,而其它位数的数据由此组合即可。通过生成大量数据的检测还没有发现周期现象,也就是从不重复的,数组长度大时所有元素等概率出现随机性良好,所以它们是真随机数。这里展示了程序连续生成大随机数:clip2net/s/1Dphz根据当时的时辰可以随机起数吗
方法要灵活,以有感觉为准,就是《梅花易数》中说的“心易”。比如你要问天气,不管什么时候,想问天气了就可以占卦,可以用当时的农历时间以时间起卦法来起卦,也可以看表以当时的时分数起卦,可以随便写字取笔画数起卦,还可以随机翻书取页码起卦,还可以自己随机报数起卦 等等。这些取数来起卦的方法很灵活,自己可以发挥,随机取到数就可以起卦。我常用的是看手表用时分数起卦,可以算任何事情,就看读卦人的水平如何、能不能把卦解出来了。没有固定的方法,《易经》的“易”就是 变 的意思,要灵活,学周易重在领悟 变与不变,法无定法。卦中的 行动 素质 态度怎么理解
切勿用任何随机数方式起卦,否则此卦没有参考价值。 图的左边是丰卦的结构,右边是其卦爻辞。爻的顺序由下往上,按此顺序,卦辞对应卦名,爻辞与爻一一对应。丰卦下部的三条爻是主卦 ,代表主方;上部的三条爻是客卦,代表客方。黑色的爻是当位的爻,对主方有利;灰色的爻是不当位的爻,对主方不利。箭头表示主卦和客卦中相应的一对爻是处于阴阳和谐状态,有应。箭头方向是从阴爻到阳爻。下爻或上爻有应对主方有利,不有应对主方不利。中爻有应不一定对主方有利,不有应不一定对主方不利,需要结合下爻和上爻作具体分析。主卦的三条爻全当位 ,表示主方的状态是恰当的,主方应当坚持目前状态:积极主动地谋取发展,维持改善素质的需要,对客方的态度强硬以制约客方。客卦中四阳和五阴不当位,表示客方的积极行动与主方的积极行动有冲突,还表示客方的素质不佳,不能让主方获益。
什么是随机数
问题一:什么是随机数? 随机数就是计算机随机产生的数字序列。伪随机数序列看上去是随机的,但是反复执行程序会发现每次程序所产生的序列是重复的。可以用srand来避免出现伪随机数,他�unsigned类型的数据作参数并未函数rand设置随机数种子。 c代码: #include 1. i=rand();产生0到RAND_MAX(32767)之间的整数 2. unsigned seed; srand(seed);设置种子 i=rand(); 问题二:真随机数的定义是什么 从软件的角度来说,如果是计算机起卦,则要用到随机数,而电脑中的随机数是假的随机数,搞那么多年程序,我还没看到过什么玩意能够有真随机数,按现代科学定义的真随机数的产生条件有起码两个: 1、真随机数数列是不可预计的,因而也不可能重复产生两个相同的真随机数数列。 2、真随机数只能用某些随机物理过程来产生。例如:放射性衰变、电子设备的热噪音、宇宙射线的触发时间等等。 在计算机中,为了满足信息熵的特性,常常是用到的信息源包括用户的人为反应或某种经过排列变形后的高频时钟的序列或者是用户运动鼠标的路径的坐标等,这在一般的程序里据我看是很少触及到的。因此,计算机上的起卦方法先不谈真随机数的如何的处理问题,还有取到了数又该如何变化的问题。如果更深化的话,还需要要论及世界的本质之类的哲学命题,暂且不表。就目前起卦程序主要在网上起而言,关联于时间的起卦法也许还有可商议之处,而对随机要求性较强的起卦方法是很不适合的。 1. 如何产生一定范围内的随机数? 直接的方法是: rand() % N; 返回从 0 到 N - 1 的数字。但这个方法不好,因为许多随机数发生器的低位比特并不随机。一个较好的方法是: (int)((double)rand() / ((double)RAND_MAX + 1) * N); 如果你不希望使用 double,另一个方法是: rand() / (RAND_MAX / N + 1); 两种方法都需要知道 RAND_MAX,而且假设 N 要远远小于 RAND_MAX。ANSI 规定标准头文件 stdlib.h 中包含 RAND_MAX 的 #define。顺便提一下,RAND_MAX 是个常数,它告诉你 C 库函数 rand() 的固定范围。你不可以设 RAND_MAX 为其它的值,也没有办法要求 rand() 返回其它范围的值。如果你用的随机数发生器返回的是 0 到 1 的浮点值,要取得范围在 0 到 N - 1 内的整数,只要将随机数乘以 N 就可以了。 2. 为什么每次执行程序,rand() 都返回相同顺序的数字? 你可以调用 srand() 来初始化伪随机数发生器的种子,传递给 srand() 的值应该是真正的随机数,例如当前时间: #include #include srand((unsigned int)time((time_t *)NULL)); 请注意,在一个程序执行中多次调用 srand() 并不见得有帮助!不要为了取得“真随机数”而在每次调用 rand() 前都调用 srand()! 3. 我需要随机的真/假值,所以我用直接用 rand() % 2,可是我得到交替的 0, 1, 0, 1, 0 。 这是个低劣的伪随机数生成器,在低位比特中不随机!很不幸,某些系统就提供这样的伪随机数生成器。请试着使用高位比特,具体请参考本文第 1 点。 问题三:c语言随机数函数是什么? rand(产生随机数) 相关函数 srand 表头文件 #include 定义函数 int rand(void) 函数说明 rand()会返回一随机数值,范围在0至RAND_MAX 间。在调用此函数产生随机数前,必须先利用srand()设好随机数种子,如果未设随机数种子,rand()在调用时会自动设随机数种子为1。关于随机数种子请参考srand()。 返回值 返回0至RAND_MAX之间的随机数值,RAND_MAX定义在stdlib.h,其值为2147483647。 范例 /* 产生介于1 到10 间的随机数值,此范例未设随机数种子,完整的随机数产生请参考 srand()*/ #include main() { int i,j; for(i=0;i 定义函数 void srand (unsigned int seed); 函数说明 srand()用来设置rand()产生随机数时的随机数种子。参数seed必须是个整数,通常可以利用geypid()或time(0)的返回值来当做seed。如果每次seed都设相同值,rand()所产生的随机数值每次就会一样。 返回值 范例 /* 产生介于1 到10 间的随机数值,此范例与执行结果可与rand()参照*/ #include #include main() { int i,j; srand((int)time(0)); for(i=0;i> 问题四:C语言中产生随机数的函数是什么? #include #include #include void main() { int i; srand((unsigned)time(NULL)); i = rand() % 100; }这样产生的随机数就是0-99之间的, 这二个函数的工作过程如下: 1) 首先给srand()提供一个种子,它是一个unsigned int类型,其取值范围从0~65535; 2) 然后调用rand(),它会根据提供给srand()的种子值返回一个随机数(在0到32767之间) 3) 根据需要多次调用rand(),从而不间断地得到新的随机数; 4) 无论什么时候,都可以给srand()提供一个新的种子,从而进一步“随机化”rand()的输出结果。 问题五:随机数的计算公式是什么? 为追求真正的随机序列,人们曾采用很多种原始的物理方法用于生成一定范围内满足精度(位数)的均匀分布序列,其缺点在于:速度慢、效率低、需占用大量存储空间且不可重现等。为满足计算机模拟研究的需求,人们转而研究用算法生成模拟各种概率分布的伪随机序列。伪随机数是指用数学递推公式所产生的随机数。从实用的角度看,获取这种数的最简单和最自然的方法是利用计算机语言的函数库提供的随机数发生器。典型情况下,它会输出一个均匀分布在0和1区间内的伪随机变量的值。其中应用的最为广泛、研究最彻底的一个算法即线性同余法。 线性同余法LCG(Linear Congruence Generator) 选取足够大的正整数M和任意自然数n0,a,b,由递推公式: ni+1=(af(ni)+b)mod M i=0,1,…,M-1 生成的数值序列称为是同余序列。当函数f(n)为线性函数时,即得到线性同余序列: ni+1=(a*ni+b)mod M i=0,1,…,M-1 以下是线性同余法生成伪随机数的伪代码: Random(n,m,seed,a,b) { r0 = seed; for (i = 1;i 问题六:随机是什么意思 随机 1. (1) [according to situation] 依照情势 必须具有一定的随机应变的能力,才能完成任务 2. (2) [random]∶自由组合 随机抽样