首页/文章/ 详情

ANSYS浮点数与APDL取整函数nint

3年前浏览3700

A.ANSYS浮点数

ANSYS数值型变量不区分整型(integer)或实型(real)数,均用双精度浮点数表示。当然也每没有所谓整型或实型变量符。

当采用未定义的变量赋予另外一个变量时,例如A=B,但B并未定义,则ANSYS内部不会赋予A零值,而是赋予A一个很小(tiny)的数值,如7.888609052E-031,并同时发出警告信息。

双精度浮点数与单精度浮点数的存储位数不同,这个不去介绍。但须知道双精度浮点数最多有15或16位十进制有效数字,因此别指望小数点15位后的赋值和运算是正确的,例如:

*creat,gc,mac

*cfopen,ls,txt

g1=1.000000000000000123 !123为15位之后

!内部不一定是1.000000000000000123

g2=5.000000000000000877 !877为15位之后

!内部不一定是5.000000000000000877

g3=g1 g2

!计算结果不一定是6.000000000000000

!可输出到文件查看

!采用42位小数有38位的F型输出

*vwrite,g1

('g1=',f42.38)

*vwrite,g2

('g2=',f42.38)

*vwrite,g3

('g3=',f42.38)

*cfclos

*end

gc

*stat

!打开文件ls.txt如下:

g1= 1.00000000000000000000000000000000000000

g2= 5.00000000000000088817841970012523233891

g3= 6.00000000000000088817841970012523233891

因此,如果有小数点15后的计算,则必须另想方法解决。这里,先记下1e-15这个近似为零的微小数值,有时可能比较有用。

B.取整函数nint(x)

取整函数nint(x)表示取最接近x的整数,简单说就是“四舍五入”取整。例如:

I=nint(5.1) !i=5,内部小数点后至少15位为零

J=nint(-7.8) !j=-8

问题来了,有时为何明显不正确呢?

例如下述计算:

ls1=1.2/0.12 0.5 !手算为10 0.5=10.5

!ls1内部为10.49999999999999822364316059974953532220

ls2=nint(ls1) !手算为11,但计算为10

ls3=1.3/0.13 0.5 !手算为10 0.5=10.5

ls4=nint(ls3) !手算为11,计算也为11

tiny=1e-15 !微值

ls5=nint(ls1 tiny) !正确

*sta

奇怪的是仅找到1.2/0.12一种情况,如1.1/0.11则是正确的。这个错误的原因不详,但取整时(x>0)增加一个微小值即可解决。

C.向下取整

某些情况下,要取不大于x的整数,即向下取整,这在ANSYS中无函数可用,但可用下述方法解决:

nint(x tiny-0.5)

如:js1=1.2/0.12

js2=nint(js1 tiny-0.5)

js3=-21.444444449

js4=nint(js3-tiny-0.5)

本文介绍了两个运算符、三个半个函数。两个运算符和未公布的max与min函数在apdl中灵活运用,会提高效率。而nint函数涉及了浮点数运算,并给出了向下取整方法。在APDL实际应用时,不宜蒙头编程,要注意检查运行结果,防止出现意想之外的结果。

在实际使用中,如有哪些明显的错误或意外情况,请留言交流。

image.png

声明:原创文章,欢迎留言与我讨论,如需转载留言

理论科普求解技术代码&命令其他软件
著作权归作者所有,欢迎分享,未经许可,不得转载
首次发布时间:2021-04-08
最近编辑:3年前
王新敏
硕士 | 教授 好好学习,天天快乐
获赞 122粉丝 611文章 96课程 0
点赞
收藏
未登录
还没有评论
课程
培训
服务
行家
VIP会员 学习 福利任务 兑换礼品
下载APP
联系我们
帮助与反馈