You have to monitor it continously. At the end or after some working hours calculate the HIT RATIO for SHARED POOL (data dictionary & library cache) as well as DATABASE BUFFER CACHE. it should not be less that approx 96% .
if it is, then you have to increase the SHARED_POOL_SIZE or DB_BLOCK_BUFFERS size accordingly and again check the HIT RATIO.
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
where name = 'shared_pool_size';
select to_number(b.value)*to_number(a.value) db_buffer_size
from v$system_parameter a,
where a.name = 'db_block_buffers' and
b.name = 'db_block_size';
4) stucture of shared memory:
free memory 10628912
db_block_buffers 4080000 (in shared pool)
State objects 183744
dictionary cache 2522900
library cache 16230044
sql area 25545532
event statistics per sess 576640