static float _CanonConvertEV (short in)
{
	short EV, Sign, Frac;
	float Frac_f;
	EV = in;
	if (EV < 0) {
	  EV = -EV;
	  Sign = -1;
	} else {
	  Sign = 1;
	}
	Frac = EV & 0x1f;
	EV -= Frac;			// remove fraction

	if (Frac == 0x0c) {		// convert 1/3 and 2/3 codes
	  Frac_f = 32.0f / 3.0f;
	} else if (Frac == 0x14) {
	  Frac_f = 64.0f / 3.0f;
	} else Frac_f = (float) Frac;

	return ((float)Sign * ((float)EV + Frac_f))/32.0f;
}
static float _CanonConvertEV (short in)
{
	short EV, Sign, Frac;
	float Frac_f;
	EV = in;
	if (EV < 0) {
	  EV = -EV;
	  Sign = -1;
	} else {
	  Sign = 1;
	}
	Frac = EV & 0x1f;
	EV -= Frac;			 

	if (Frac == 0x0c) {		 
	  Frac_f = 32.0f / 3.0f;
	} else if (Frac == 0x14) {
	  Frac_f = 64.0f / 3.0f;
	} else Frac_f = (float) Frac;

	return ((float)Sign * ((float)EV + Frac_f))/32.0f;
}