idl使大数= 0.0

时间:2016-09-30 21:24:22

标签: astronomy idl-programming-language

我正在尝试在这个星系中心的黑洞的质量,我有太阳质量的质量,但需要它以公斤为单位。但是,当我尝试转换(1Msolar = 1.989 * 10 ^ 30kg)时,idl只给我0.0000。我不知道我做错了什么,我试着告诉idl打印1.989 * 10 ^ 30和19890000000000000000000000000000,输出分别为0.00000和-1。有人可以解释为什么会这样吗?

2 个答案:

答案 0 :(得分:3)

这是类型转换错误/溢出问题。当您使用大数字时,您需要为整数显式定义它们为longlong64(即64位长整数)。对于实数,您可以使用floatdouble并执行此操作,最简单的方法如下:

msun = 1.989d30

相当于1.989 x 10 30 作为双精度浮点数。如果您想要单精度,那么只需执行以下操作:

msun = 1.989e30

要生成32位或64位长整数,只需使用:

msun = 1989L * 10L^(27)

或64位

msun = 1989LL * 10LL^(27)

答案 1 :(得分:1)

我同意@ honeste_vivere关于溢出和数据类型的答案,但我想补充一点,我经常更改单位以避免这种情况。我的密度通常是1e19 / m ^ 3,因此我以1e19 / m ^ 3为单位投射密度,然后处理1阶数。这可以防止在最小二乘拟合和其他可能做事的操作中出现数学错误就像我的数据一样。