回 帖 发 新 帖 刷新版面

主题:[原创]编程时如何对这样的数据赋值?

最近在改一个matlab程序,开始数据赋值的时候有这么几句:
PI=3.1415926
c=29979245800 
SIc=299792458 
epsilon0=1/(4*pi*SIc**2)*10**7 
mu0=4*pi*10**(-7) 
e=1.60217733*10**(-19) 
m=9.1093897*10**(-31)
发现在fortran中直接这样赋值的话,像C就会产生整数溢出,而像e那样的会直接变成0,而PI直接变成3.141593了。如果声明成双精度型变量,c还会整数溢出e不会变成0了,但e会变成1.602177372940411E-019,小数部分发生改变,像e直接写成指数形式倒是可以,但小数部分还是发会生舍去,另外因为计算中涉及到的指数运算很多,因为matlab都是用^直接指数运算,直接批替换为**方便了很多,但会不会对结果产生大的影响呢?
想请教一下大家:在编程计算实际问题的时候,对于数据类型如何处理比较好呢。上面的赋值,用fortran如何编写比较合理呢?
我编译器用的是Microsoft developer studio

回复列表 (共8个回复)

沙发

matlab默认都是双精度的, 连常量也是. fortran一般默认是单精度即使变量是双精度但等号右边的常数是单精度的, 当然可以在IDE那里改默认(命令行也应该可以).
双精度赋值可以形如 PI=3.1415926D0
后面D0是指双精度10的0次方. 如果还不懂请翻书.

板凳


原来是这样啊,万分感谢回答[em2]

3 楼

我觉得lz还不狠
应该e=1.60217733*10**(-190000000)

4 楼

晕,双精度最小也就-308吧

5 楼

因为手头好多matlab程序需要用fortran重新编译,结果发现工作量太大了,特别是涉及到计算数据很多的程序,定义成双精度数据后,经常溢出,调的快崩溃了

6 楼

是的, matlab转fortran并不轻松的. matlab不算是编程语言, 提供了很多现成的函数和功能但在fotran里面都要另外想办法.
fortran还是要有一定基础才好改, 毕竟不是"拿来用"那种只需要看明白就可以的要求.

7 楼


这一个月改得太痛苦了,将matlab改写为的fortran程序大概有2000行了,从0基础到略通些fortanr的基础知识,我是直接COPY matlab的程序来改,最明显的感受是:很小的程序直接改还好说,稍大些的程序如果你知道原理和结构的话,改还不如直接一开始就纯用fortran语言来编写来的快,这样你脑子在编程过程中一直是清晰的[em10][em10]当然关键原因在于己经不仅仅是菜的问题了,而且是0基础[em21][em21]

8 楼

没关系,其实fortran入门还算不太难,毕竟最早使用fortran的人都是搞计算出身而不是学习计算机语言的:)
我刚开始接触fortran的时候,也是0基础——谁都是啦:)也都是慢慢这么过来的:)只要你用心,慢慢地你也会成为高手的:)多看帮助、多看书。然后看标准文档:)

我来回复

您尚未登录,请登录后再回复。点此登录或注册