#/*********************************************************** # normal.rb -- 正規分布 #***********************************************************/ PI = 3.14159265358979323846264 def p_nor( z ) # 正規分布の下側確率 z2 = z * z t = p = z * Math::exp(-0.5 * z2) / Math::sqrt(2 * PI) 3.step(200, 2) do |i| prev = p; t *= z2 / i.to_f; p += t if (p == prev); return 0.5 + p; end end return (z > 0) ? 1 : 0 end def q_nor( z ) # 正規分布の上側確率 return 1 - p_nor(z) end printf("正規分布の下側確率\n") for i in 0..20 z = 0.2 * i printf("%3.1f %16.14f\n", z, p_nor(z)) end exit 0