use strict; use warnings; # G in m^3/kg/s^2 # c in m/s # m in kg my $G=6.67428*10**-11; my $c= 299792458; my $PI= 3.14159265358979323846264338327950288; # in Joule my $eV= 1.60217653*10**-19; sub e2m { my $e= shift; return $e/$c**2; } my $MeV= e2m($eV); printf("MeV= %10g\n", $MeV); my $Melectron= 9.10938215*10**-31; my $Msun= 1.9891*10**30; my $Mearth= 5.9736 * 10**24; my $Rearth= 6378100; # schwarzschild radius sub Rs { my $m= shift; return 2*$G*$m/$c**2; } # gravitational potential energy sub Ug { my ($m1, $m2, $r)= @_; return $G*$m1*$m2/$r; } # escape velocity: sub ve { my ($m, $r)= @_; return sqrt(2*$G*$m/$r); } # volume of sphere = 4/3*PI*r**3 sub Vsphere { my $r= shift; return 4/3*$PI*$r**3; } # density: sub density { my ($m, $r)= @_; return $m/Vsphere($r); } printf("earth: %14g\n", ve($Mearth, $Rearth)); # print radius + density for various mass blackholes for (my $m= $MeV ; 1 ; $m*=2) { # note: ve($m, Rs($m)) == $c printf("%14g %14g %14g\n", $m, Rs($m), density($m, Rs($m))); }