Ur formula not correct.

1) shared pool has free memory (usually)
2) not all part of shared pool u descride in this formula.
3) simplest way to get pool's sizes --> use v$parameter view.
in this case u can use query (for old versions of oracle):

select to_number(nvl(value,'0')) shared_mem
from v$system_parameter
where name = 'shared_pool_size';

select to_number(b.value)*to_number(a.value) db_buffer_size
from v$system_parameter a,
v$system_parameter b,
where a.name = 'db_block_buffers' and
b.name = 'db_block_size';

4) stucture of shared memory:
free memory 10628912
miscellaneous 805148
db_block_buffers 4080000 (in shared pool)
State objects 183744
db_files 72496
dictionary cache 2522900
library cache 16230044
sql area 25545532
processes 115200
sessions 359040
heap 1802412
event statistics per sess 576640
locks 86768

!! And there are not all parts of shared pool.