39 lines
1.2 KiB
C
39 lines
1.2 KiB
C
/* ************************************************************************** */
|
|
/* _____ _ */
|
|
/* bcd/get_exponent.c |_ _|__ _ _| |__ ___ _ _ */
|
|
/* | Project: libg1m | |/ _ \| | | | '_ \ / _ \ | | | */
|
|
/* | | (_) | |_| | | | | __/ |_| | */
|
|
/* By: thomas <thomas@touhey.fr> |_|\___/ \__,_|_| |_|\___|\__, |.fr */
|
|
/* Last updated: 2016/11/21 16:14:08 |___/ */
|
|
/* */
|
|
/* ************************************************************************** */
|
|
#include <libg1m/internals/bcd.h>
|
|
|
|
/**
|
|
* g1m_bcd_get_exponent:
|
|
* Get exponent.
|
|
*/
|
|
|
|
int g1m_bcd_get_exponent(struct bcd *bcd)
|
|
{
|
|
unsigned char *bytes = bcd->BCDval;
|
|
|
|
int exp = upr(0) * 100 + lwr(0) * 10 + upr(1);
|
|
return ((exp % 500) - 99);
|
|
}
|
|
|
|
/**
|
|
* g1m_bcd_get_exponent_neg:
|
|
* Get exponent and if it is negative.
|
|
*/
|
|
|
|
int g1m_bcd_get_exponent_neg(struct bcd *bcd, int *neg)
|
|
{
|
|
unsigned char *bytes = bcd->BCDval;
|
|
|
|
*neg = 0;
|
|
int exp = upr(0) * 100 + lwr(0) * 10 + upr(1);
|
|
if (exp >= 500) exp -= 500, *neg = 1;
|
|
return (exp - 99);
|
|
}
|