Has cyber security been a challenge in your government organization? Are you looking to improve your government's network security? Learn more about how to improve your government organization's security by viewing our on-demand webinar!

Hi

I have to work with float values but the micro i am using does not support floating point operations.

for exmple

x=y+z;

z=0.255

y=1;

then x should be 1.255 but i am getting 1 as the out put.

how to use the float values with out using the float data type in code.

I have to work with float values but the micro i am using does not support floating point operations.

for exmple

x=y+z;

z=0.255

y=1;

then x should be 1.255 but i am getting 1 as the out put.

how to use the float values with out using the float data type in code.

Experts Exchange Solution brought to you by

Enjoy your complimentary solution view.

Get every solution instantly with Premium.
Start your 7-day free trial.

I wear a lot of hats...

"The solutions and answers provided on Experts Exchange have been extremely helpful to me over the last few years. I wear a lot of hats - Developer, Database Administrator, Help Desk, etc., so I know a lot of things but not a lot about one thing. Experts Exchange gives me answers from people who do know a lot about one thing, in a easy to use platform." -Todd S.

I an expressuion a + b , b is coming as float value.

when i add a and b. the value of b is not retaied as float but taken as int .

I have to retain that value

Anyway, a typical way to do that used to be to scale the input values to allow the smallest value needed. Like @ozo suggested, scaling the values lets it work with integer arithmetic. You have to remember to display the results correctly on the output by putting a decimal where it needs to be.

Do you mean print? If so, what print operations does the micro you are using support?

What do you mean by "retain"?

What do you want to do with the value?

sum = y+x;

product = y*x/scale;

What do you want to do with the value?

sum = y+x;

product = y*x/scale;

x= (int)((a+b)*(value *(a-b)/100))

here a+b is coming as interger

value *(a-b)/100) is decimal

so the second part is discarded as i am trypecasting to int

but i dont want that value to be discarded.

It seems we have a bit of a language barrier. Maybe another voice will help?

x= (int)((a+b)*(value *(a-b)/100))

here a+b

value *(a-b)/100)

so

Because all of your variables are integers, all values, including the intermediate values will have an integer type. When you divide two values, the result is an integer. In your example above you divide by 100. If the divisor is between 1 and 99, you get the same result, 0. In effect, 1/100 = 99/100, for the purpose of this calculation as both result in integer 0.

To capture the fractional part of the calculation you need to determine how many decimal places you need. It's probably beyond the scope of your project to use true floating point (variable precision), so decide how many digits to the right of the decimal that you'll need. Are 2 enough? With your equation that becomes the simplest. Are 3 enough? That resolution is 1/1000.

x= (int) ((a+b)*(value *(a-b)/100))

becomes

2 decimal places -- x = ((a+b) * (value *(a-b)))

3 decimal places -- x = ((a+b) * 1000 * (value *(a-b)/100))

When you convert the value to a string, insert a decimal point 2 (or 3 places) from the right.

If you need the fractional part for future computations, just subtract it. But remember that you're using integer data types so the value is 1000 times the fraction's true value.

// Compute value * 1000

x = ((a+b) * 1000 * (value *(a-b)/100))

// Compute fractional part

frac = x % 1000;

// Restore x to the correct scale

x /= 1000;

Good Luck,

Kent

Experts Exchange Solution brought to you by

Your issues matter to us.

Facing a tech roadblock? Get the help and guidance you need from experienced professionals who care. Ask your question anytime, anywhere, with no hassle.

Start your 7-day free trialinstead of

x= (int)((a+b)*(value *(a-b)/100))

use

x=(((a+b)*value*(a-b)) + 50)/100

that will work as long as (a+b)*value*(a-b)+50 is not greater than maximum int. the +50 makes correct rounding, for example if the product of the 3 factors is 150 by adding 50 it would be 200 and divided by 100 is 2. so the decimal result of 1.5 would be correctly rounded to 2.

Sara

Using scaled arithmetic works fine for a small number of variables with limited range and precision. Otherwise it may be difficult to make workable.

C

From novice to tech pro — start learning today.

Experts Exchange Solution brought to you by

Enjoy your complimentary solution view.

Get every solution instantly with Premium.
Start your 7-day free trial.

If it supports integer operations in the appropriate range, you might use

z=255

y=1000

x=1255