Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #pragma once
- #include <math.h>
- int pow(int base, int exponent)
- {
- int value = base;
- if(exponent >= 1)
- {
- while (exponent > 1)
- {
- value *= base;
- exponent--;
- }
- }
- else
- {
- while (exponent < 1)
- {
- value /= base;
- exponent++;
- }
- }
- return value;
- }
- namespace DMS
- {
- struct tDMS
- {
- int degrees;
- int minutes;
- double seconds;
- };
- void double_to_DMS(tDMS* outDMS, double value)
- {
- outDMS -> degrees = (int)value;
- double newVal = fabs(value);
- newVal = newVal - (int)newVal;
- outDMS -> minutes = (int)(newVal * 60.0);
- outDMS -> seconds = 3600*(newVal - (outDMS -> minutes / 60.0));
- }
- void representDoubleAsIntegerDividedByPowerOf10(char* outString, double num)
- {
- char numberStr[32];
- sprintf(numberStr, "%g", num);
- char* decimalDot = strchr(numberStr, '.');
- int neededExponent;
- if(decimalDot != NULL)
- {
- neededExponent = strlen(decimalDot+1);
- *decimalDot = NULL;
- int dividend = pow(10, neededExponent);
- sprintf(outString, "%hs%hs/%d", numberStr, decimalDot+1, dividend);
- }
- else
- sprintf(outString, "%hs/1", numberStr);
- }
- void doubleToRationalGPSrepresentation(char* outStr, double value)
- {
- DMS::tDMS DMS_value;
- DMS::double_to_DMS(&DMS_value, fabs(value));
- char seconds[32];
- representDoubleAsIntegerDividedByPowerOf10(seconds, DMS_value.seconds);
- sprintf(outStr, "%d/1 %d/1 %hs", DMS_value.degrees, DMS_value.minutes, seconds);
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement