use double instead of float because its more portable

This commit is contained in:
Duncan Laurie 2005-03-18 00:43:05 +00:00
parent 3da7fea17f
commit 4e59621e64
3 changed files with 26 additions and 30 deletions

View File

@ -607,8 +607,8 @@ int ipmi_sdr_print_sdr(struct ipmi_intf * intf, uint8_t type);
int ipmi_sdr_print_rawentry(struct ipmi_intf * intf, uint8_t type, uint8_t * raw, int len); int ipmi_sdr_print_rawentry(struct ipmi_intf * intf, uint8_t type, uint8_t * raw, int len);
int ipmi_sdr_print_listentry(struct ipmi_intf * intf, struct sdr_record_list * entry); int ipmi_sdr_print_listentry(struct ipmi_intf * intf, struct sdr_record_list * entry);
const char * ipmi_sdr_get_status(uint8_t stat); const char * ipmi_sdr_get_status(uint8_t stat);
float sdr_convert_sensor_reading(struct sdr_record_full_sensor * sensor, uint8_t val); double sdr_convert_sensor_reading(struct sdr_record_full_sensor * sensor, uint8_t val);
uint8_t sdr_convert_sensor_value_to_raw(struct sdr_record_full_sensor * sensor, float val); uint8_t sdr_convert_sensor_value_to_raw(struct sdr_record_full_sensor * sensor, double val);
struct ipmi_rs * ipmi_sdr_get_sensor_reading(struct ipmi_intf * intf, uint8_t sensor); struct ipmi_rs * ipmi_sdr_get_sensor_reading(struct ipmi_intf * intf, uint8_t sensor);
const char * ipmi_sdr_get_sensor_type_desc(const uint8_t type); const char * ipmi_sdr_get_sensor_type_desc(const uint8_t type);

View File

@ -96,12 +96,12 @@ utos(uint32_t val, int bits)
* *
* returns floating-point sensor reading * returns floating-point sensor reading
*/ */
float double
sdr_convert_sensor_reading(struct sdr_record_full_sensor * sensor, sdr_convert_sensor_reading(struct sdr_record_full_sensor * sensor,
uint8_t val) uint8_t val)
{ {
int m, b, k1, k2; int m, b, k1, k2;
float result; double result;
m = __TO_M(sensor->mtol); m = __TO_M(sensor->mtol);
b = __TO_B(sensor->bacc); b = __TO_B(sensor->bacc);
@ -111,14 +111,14 @@ sdr_convert_sensor_reading(struct sdr_record_full_sensor * sensor,
switch (sensor->unit.analog) switch (sensor->unit.analog)
{ {
case 0: case 0:
result = (float)(((m * val) + result = (double)(((m * val) +
(b * pow(10, k1))) * pow(10, k2)); (b * pow(10, k1))) * pow(10, k2));
break; break;
case 1: case 1:
if (val & 0x80) val ++; if (val & 0x80) val ++;
/* Deliberately fall through to case 2. */ /* Deliberately fall through to case 2. */
case 2: case 2:
result = (float)(((m * (int8_t)val) + result = (double)(((m * (int8_t)val) +
(b * pow(10, k1))) * pow(10, k2)); (b * pow(10, k1))) * pow(10, k2));
break; break;
default: default:
@ -131,41 +131,37 @@ sdr_convert_sensor_reading(struct sdr_record_full_sensor * sensor,
case SDR_SENSOR_L_LINEAR: case SDR_SENSOR_L_LINEAR:
break; break;
case SDR_SENSOR_L_LN: case SDR_SENSOR_L_LN:
result = logf(result); result = log(result);
break; break;
case SDR_SENSOR_L_LOG10: case SDR_SENSOR_L_LOG10:
result = log10f(result); result = log10(result);
break; break;
case SDR_SENSOR_L_LOG2: case SDR_SENSOR_L_LOG2:
result = (float)(logf(result) / logf(2.0)); result = (double)(log(result) / log(2.0));
break; break;
case SDR_SENSOR_L_E: case SDR_SENSOR_L_E:
result = expf(result); result = exp(result);
break; break;
case SDR_SENSOR_L_EXP10: case SDR_SENSOR_L_EXP10:
result = powf(10.0, result); result = pow(10.0, result);
break; break;
case SDR_SENSOR_L_EXP2: case SDR_SENSOR_L_EXP2:
result = powf(2.0, result); result = pow(2.0, result);
break; break;
case SDR_SENSOR_L_1_X: case SDR_SENSOR_L_1_X:
result = powf(result, -1.0); /*1/x w/o exception*/ result = pow(result, -1.0); /*1/x w/o exception*/
break; break;
case SDR_SENSOR_L_SQR: case SDR_SENSOR_L_SQR:
result = powf(result, 2.0); result = pow(result, 2.0);
break; break;
case SDR_SENSOR_L_CUBE: case SDR_SENSOR_L_CUBE:
result = powf(result, 3.0); result = pow(result, 3.0);
break; break;
case SDR_SENSOR_L_SQRT: case SDR_SENSOR_L_SQRT:
#ifdef __sun result = sqrt(result);
result = (float)sqrt((double)result);
#else
result = sqrtf(result);
#endif
break; break;
case SDR_SENSOR_L_CUBERT: case SDR_SENSOR_L_CUBERT:
result = cbrtf(result); result = cbrt(result);
break; break;
} }
@ -181,7 +177,7 @@ sdr_convert_sensor_reading(struct sdr_record_full_sensor * sensor,
*/ */
uint8_t uint8_t
sdr_convert_sensor_value_to_raw(struct sdr_record_full_sensor * sensor, sdr_convert_sensor_value_to_raw(struct sdr_record_full_sensor * sensor,
float val) double val)
{ {
int m, b, k1, k2; int m, b, k1, k2;
double result; double result;
@ -413,7 +409,7 @@ ipmi_sdr_print_sensor_full(struct ipmi_intf * intf,
{ {
char sval[16], unitstr[16], desc[17]; char sval[16], unitstr[16], desc[17];
int i=0, validread=1, do_unit=1; int i=0, validread=1, do_unit=1;
float val = 0.0; double val = 0.0;
struct ipmi_rs * rsp; struct ipmi_rs * rsp;
uint8_t min_reading, max_reading; uint8_t min_reading, max_reading;
@ -616,7 +612,7 @@ ipmi_sdr_print_sensor_full(struct ipmi_intf * intf,
printf(" Sensor Reading : "); printf(" Sensor Reading : ");
if (validread) { if (validread) {
uint16_t raw_tol = __TO_TOL(sensor->mtol); uint16_t raw_tol = __TO_TOL(sensor->mtol);
float tol = sdr_convert_sensor_reading(sensor, raw_tol * 2); double tol = sdr_convert_sensor_reading(sensor, raw_tol * 2);
printf("%.*f (+/- %.*f) %s\n", printf("%.*f (+/- %.*f) %s\n",
(val==(int)val) ? 0 : 3, (val==(int)val) ? 0 : 3,
val, val,
@ -649,7 +645,7 @@ ipmi_sdr_print_sensor_full(struct ipmi_intf * intf,
(sensor->unit.analog == 2 && sensor->sensor_min == 0x80)) (sensor->unit.analog == 2 && sensor->sensor_min == 0x80))
printf(" Minimum sensor range : Unspecified\n"); printf(" Minimum sensor range : Unspecified\n");
else else
printf(" Minimum sensor range : %.3f\n", (float)min_reading); printf(" Minimum sensor range : %.3f\n", (double)min_reading);
max_reading = (uint8_t)sdr_convert_sensor_reading( max_reading = (uint8_t)sdr_convert_sensor_reading(
sensor, sensor->sensor_max); sensor, sensor->sensor_max);
@ -658,7 +654,7 @@ ipmi_sdr_print_sensor_full(struct ipmi_intf * intf,
(sensor->unit.analog == 2 && sensor->sensor_max == 0x7f)) (sensor->unit.analog == 2 && sensor->sensor_max == 0x7f))
printf(" Maximum sensor range : Unspecified\n"); printf(" Maximum sensor range : Unspecified\n");
else else
printf(" Maximum sensor range : %.3f\n", (float)max_reading); printf(" Maximum sensor range : %.3f\n", (double)max_reading);
printf(" Event Message Control : "); printf(" Event Message Control : ");
switch (sensor->sensor.capabilities.event_msg) { switch (sensor->sensor.capabilities.event_msg) {

View File

@ -182,7 +182,7 @@ ipmi_sensor_print_full_analog(struct ipmi_intf * intf,
{ {
char unitstr[16], id[17]; char unitstr[16], id[17];
int i=0, validread=1, thresh_available = 1; int i=0, validread=1, thresh_available = 1;
float val = 0.0; double val = 0.0;
struct ipmi_rs * rsp; struct ipmi_rs * rsp;
char * status = NULL; char * status = NULL;
@ -314,7 +314,7 @@ ipmi_sensor_print_full_analog(struct ipmi_intf * intf,
printf(" Sensor Reading : "); printf(" Sensor Reading : ");
if (validread) { if (validread) {
uint16_t raw_tol = __TO_TOL(sensor->mtol); uint16_t raw_tol = __TO_TOL(sensor->mtol);
float tol = sdr_convert_sensor_reading(sensor, raw_tol * 2); double tol = sdr_convert_sensor_reading(sensor, raw_tol * 2);
printf("%.*f (+/- %.*f) %s\n", printf("%.*f (+/- %.*f) %s\n",
(val==(int)val) ? 0 : 3, (val==(int)val) ? 0 : 3,
val, val,
@ -512,7 +512,7 @@ ipmi_sensor_set_threshold(struct ipmi_intf * intf, int argc, char ** argv)
{ {
char * id, * thresh; char * id, * thresh;
uint8_t settingMask; uint8_t settingMask;
float setting; double setting;
struct sdr_record_list * sdr; struct sdr_record_list * sdr;
struct ipmi_rs * rsp; struct ipmi_rs * rsp;
@ -533,7 +533,7 @@ ipmi_sensor_set_threshold(struct ipmi_intf * intf, int argc, char ** argv)
id = argv[0]; id = argv[0];
thresh = argv[1]; thresh = argv[1];
setting = (float)atof(argv[2]); setting = (double)atof(argv[2]);
if (strncmp(thresh, "unr", 3) == 0) if (strncmp(thresh, "unr", 3) == 0)
settingMask = UPPER_NON_RECOV_SPECIFIED; settingMask = UPPER_NON_RECOV_SPECIFIED;
else if (strncmp(thresh, "ucr", 3) == 0) else if (strncmp(thresh, "ucr", 3) == 0)