用java计算小数的双阶乘
双阶乘n!!, n!!≠(n!)! .
5!!=5(5-2)(5-4)=5*3*1=15
计算公式为
其中x可以是正数,负数和0。但不能是负偶数。
用java实现了df()函数计算双阶乘,比如
double d= df(3.1); //3.2367219415374735
double d= df(-3.1); //-0.9804732962114218
公式中的gamma函数是用java调用python实现的。
d:/工业/hk/python/表达式.csv
D:/Download/cal.py
程序中只有两个本地路径,一个是java传递给python的命令,一个是python程序的地址。
Java程序为
package greenwood;import java.io.DataInputStream;
import java.io.FileWriter;
import java.io.IOException;
import java.io.InputStream;
import java.text.ParseException;public class dff {//double factorial functionpublic static double calc2( String stra ) throws IOException, ParseException, InterruptedException {FileWriter fileWriter5 = new FileWriter("d:/工业/hk/python/表达式.csv");//stra="hin( fx1,fx1)";//stra="jin( rj1,rj2)";stra=stra.replaceAll(",","#");fileWriter5.write( stra + "\r\n");fileWriter5.flush();String exe = "python";String command = "D:/Download/cal.py"; String[] cmdArr = new String[] {exe ,command };Process process = Runtime.getRuntime().exec(cmdArr);InputStream is = process.getInputStream();DataInputStream dis = new DataInputStream(is);String str = dis.readLine();process.waitFor();//System.out.println(str); double df= Double.parseDouble(str.trim()); return df;}public static double gamma( double a ) throws IOException, ParseException, InterruptedException {String s1="sympy.gamma("+ a +")";double ds=calc2( s1 );return ds;}public static double df( double a ) throws IOException, ParseException, InterruptedException {double f=0;double d1=gamma( (a+2)/2);double d2=Math.pow(2 , a/2);double d3=Math.pow( Math.PI/2 , (-1+Math.cos(a*Math.PI))/4 );double d=d1*d2* d3;//System.out.println( d+" "+d1+" "+d2+" "+d3 );f=d;return f;}public static void main(String[] args) throws IOException, ParseException, InterruptedException {//double d= df(0);//1//double d= df(1); //1//double d= df(2);//2//double d= df(3);//3//double d= df(4);//8//double d= df(5);//14.99999999999999//double d= df(6); //48//double d= df(7); //104.99999999999868//double d= df(8); //384.0//double d= df(9); //944.9999999999997//double d= df(-5); //0.33333333333333415//double d= df(-7); //-0.06666666666666668//double d= df(-9); //0.009523809523809521//double d= df(3.1); //3.2367219415374735double d= df(-3.1); //-0.9804732962114218System.out.println( d );}}
Python程序为
import sympy
import math
from sympy import symbols, cancel
import csva = sympy.Symbol('a')
e = sympy.Symbol('e')
m = sympy.Symbol('m')
h = sympy.Symbol('h')
l = sympy.Symbol('l')
lp = sympy.Symbol('lp')
r = sympy.Symbol('r')
EE = sympy.Symbol('EE')
R = sympy.Symbol('R')
r1 = sympy.Symbol('r1')
r2 = sympy.Symbol('r2')
r3 = sympy.Symbol('r3')
σ = sympy.Symbol('σ')
c1 = sympy.Symbol('c1')
c2 = sympy.Symbol('c2')
c3 = sympy.Symbol('c3')μ = sympy.Symbol('μ')
v = sympy.Symbol('v')α = sympy.Symbol('α')
β = sympy.Symbol('β')x = sympy.Symbol('x')
y = sympy.Symbol('y')
z = sympy.Symbol('z')θ1= sympy.Symbol('θ1')
θ2= sympy.Symbol('θ2')
Φ1= sympy.Symbol('Φ1')
Φ2= sympy.Symbol('Φ2')θ= sympy.Symbol('θ')
Ψ= sympy.Symbol('Ψ')
Φ= sympy.Symbol('Φ')
pi=sympy.Symbol('pi')
E=sympy.Symbol('E')
I=sympy.Symbol('I')
sin=sympy.Symbol('sin')
cos=sympy.Symbol('cos')
tan=sympy.Symbol('tan')
diff=sympy.Symbol('diff')
integrate=sympy.Symbol('integrate')pi=sympy.pi
E=sympy.E
sin=sympy.sin
cos=sympy.cos
tan=sympy.tan
diff=sympy.diff
integrate=sympy.integratef = csv.reader(open('d:/工业/hk/python/表达式.csv','r'))
for i in f:f2=(i)f2[0] = f2[0].replace("#", ",")d=(eval(f2[0]))print ( round( d,16 ) )
用java计算小数的双阶乘相关推荐
- Java计算1到100阶乘和
Java计算1到100阶乘和 1.定义一个 factorial类 2.定义一个测试类Cs2 1.定义一个 factorial类 import java.math.BigDecimal; public ...
- java 计算小数_java基础之小数计算
项目中会经常用到小数位的计算.很多人第一感觉会想尝试使用float或者double,然而在精准计算,例如金钱计算中,使用float或者double来计算会出现意想不到后果. 如图所示:并没有得到预期的 ...
- java求一个数的阶乘_Java如何使用方法计算一个数字的阶乘值?
在Java中,如何使用方法来计算一个数字的阶乘值? 这个例子显示了使用9(9)数字的因子计算方法. package com.yiibai; public class CalculatingFactor ...
- Java实现若干个数计算平均值并保留小数位 java计算平均值 java四舍五入保留小数
Java实现若干个数计算平均值并保留小数位 java计算平均值 java四舍五入保留小数 一.需求 1.在项目中,要计算若干个指标的平均值,找了一圈,发现JDK中没有提供,于是乎,造一个. 2.因若干 ...
- 1555:计算双阶乘
1555:计算双阶乘 Description 定义N的双阶乘: N!!=N*(N-2)*(N-4)*....i(i=1 or i=2) 比如5!!=5*3*1=15 而6!!=6*4*2=48 特别的 ...
- 计算超大整数的阶乘(java)
思想 思想来自于网上,将所有的计算结果每一位存储到数组中,利用十进制,每次阶乘对数组中的每一位与目标阶乘,然后计算进位,比如:8!= 5040*8={5,0,4,0}*8={40,0,32,0}={4 ...
- java中求5的阶乘
题目如上所示:java中求5的阶乘是多少? 什么事阶乘呢? 答:阶乘是基斯顿·卡曼(Christian Kramp,1760-1826)于 1808 年发明的运算符号,是数学术语. 一个正整数的阶乘( ...
- js计算浮点数出现小数;解决js计算小数问题;js数组相加出现小数;
原博1 原博2 方案1和方案2都是有效的 情景: 在计算浮点数时候,出现多余小数. 例如: 1.11 + 1 = 2.1100000000000003 为什么计算小数会出现误差? 浮点数值的最高进度是 ...
- java中小数后加f_在 Java 中,小数默认为 ,如果要指定 类型请在小数后加 F/f 。_学小易找答案...
[填空题]Java 语言采用双字节的 编码. [单选题]马斯洛需要层次论所提出的5种需要:生理需要.安全需要.归属需要.( ).自我实现需要 [填空题]String s= " abc &qu ...
最新文章
- 凭借识别人的情绪,他们做到了2000多万用户、1000多万订单
- python的数据类型和变量的定义及使用
- mysql语句中事务可靠性_MYSQL中的事务
- locker server启动
- linux lua socket编程,CentOs 安装lua,luasocket
- 2013蓝桥杯C++B:错误票据
- 微信小程序发送验证码短信SDK及文档
- WPF 入门教程打印控件
- jQuery实现button按钮提交表单
- web项目缺少web组件才能与vs一起运行,带razor语法的 asp.net web pages 2.0.0.1
- 衣带渐宽终不悔,为“指针”消得人憔悴(二)
- 前端进阶知识汇总(持续更新中)
- 申请苹果开发者公司账号和邓白氏编码全流程
- oracle 列转行
- 【jzoj4826】【小澳的葫芦】【二分答案】
- 黑色沙漠(黑沙)单机版局域网联机外网公网教程
- 微信小程序—收藏功能
- LeeTCode:6. Z 字形变换 python实现
- 陕西渭南有什么小吃_爱问知识人
- KK模组、同步带模组和线性模组的区别在哪里?