||
1 背景:
在ANSYS、Basic中不分数据类型,感觉有点随心所欲;Fortran、C、Delphi语言未了严谨,恐怕出错,所以必须加以说明数据类型,如Float等类型。但是,如一个数据只能取整,还必须对其进行实数运算,比如对数列的“项”进行实数运算,这就必须数据强制转换。
VC、C中都有强制转换的函数,但是非常遗憾,Pascal语言由于其严谨性,不支持任何形式的仅仅是数据间的类型转换。
2 问题提出:
此时本人编程出现一个问题:
1) 比如一个圆环内半径为R1,外半径为R2,其间装有硅钢片,厚度为t,则可装硅钢片的片数近似为
N=(R2-R1)/t
而此时计算出的N一定是个实数类型。
2) 因为需要对每一片硅钢叠片进行物理特性的处理,所以期望循环N次进行。
3) Delphi的for循环仅仅支持“顺序型”变量,不像ANSYS的循环可以任意指定步长。
4) 当然,也可以采用While循环,或者repeat循环。本人认为,for循环最近,好控制,不会出现死循环的一些问题。
待解决:如何用for循环来控制一个实数呢?
3 解决方案:
发现一个函数Trunc:
Tranc (x: Extended): Int64
表示将实数x的小数丢掉,并且“整数化”。简直是太好了,不仅进行了“截断”运算,而且顺便进行了“强制转化”,一举两得。
比如:
R2=92.5 //外半径;
R1=22.5 //内半径;
t=0.2 //硅钢片厚度;
N=(R2-R1)/t //片数,应该为350;
如运行则Tranc(N)=350;而Tranct((R2-R1)/t)=349,二者差“1”。
开始循环:
for I:=1:N
begin
核心算法
..........
end;
4 结论:
Tranc( )不仅可以截断小数,而且返回的值为真正的整数,完成了强制类型的转化,真正的一举两得。
Archiver|手机版|科学网 ( 京ICP备07017567号-12 )
GMT+8, 2024-11-22 19:08
Powered by ScienceNet.cn
Copyright © 2007- 中国科学报社