Try to use DIV32.
Code:Dummy VAR WORD Number VAR BYTE Result VAR BYTE Dummy = Number * 1000 Result=DIV32 4474
Try to use DIV32.
Code:Dummy VAR WORD Number VAR BYTE Result VAR BYTE Dummy = Number * 1000 Result=DIV32 4474
Not using a compiler, using a calculator.
Input=250 and you want about 1/4 of that.
250*.2235=55.875
With out using a decimal point!
250*223/1000=55.75 (I did not use 2235/10000)
If the input will fit into a byte and 223 fits into a byte. Then (byte * byte)=word and then word/1000=55.
If you need a input like 350 which is a word and/or you want to use 2235/10000 then you will need to do word*word and word**word to get two words or 32 bits. You might also look at word*/word to get 16 bits out of the middle of the 32 bits.
Not using a compiler, using a calculator.
Input=250 and you want about 1/4 of that.
250*.2235=55.875
With out using a decimal point!
Yes, I always like the types of Stupid answer's one gets when asking a simple question.
Number is a variable and constantly changing.
As I said for example 250
This is just part of a longer calculation. If it was as simple as just putting a number I really wanted, I think I might of though of that....
I was just looking for the format to input numbers like .00044
thanks
Gee, and you question SO looked like you needed to multiply a whole number by .2235 and the .2235 was where the trouble is. If you need .00044*.2235, thats a different problem. You are correct, your question was simplified.Where are you getting numbers like .00044 in your pic? how is that generated?
-Bert
The glass is not half full or half empty, Its twice as big as needed for the job!
http://foamcasualty.com/ - Warbird R/C scratch building with foam!
Hello
Thanks
I am just trying to understand the work around format in PIC to work with floating point values, the systems I normally program have floating point at part of there normal stucture.
I though from the orignal post that all you needed to do is use fractions in your formula and it would work but it does not seem to be so.
For example If I needed to multiply some varriable by .234 or any decimal value to get an answer, how would this be done?
In my case I am takeing a analog voltage and turning in into a tempature that is displayed on a screen.
The temperature result does not need to be floating point
But if I can not use floating point numbers to scale correctly the value could be off by 5+- degrees pretty quickly
The true formula is
result=adc10((adc10*.00034)+.2235) 'where adc10 in the pic 10 analog register
To be within 1% of the true tempature
Thanks
so plugging in extremes:
adc10=1 gives us
result=1((1*.00034)+.2235)=1(.00034+.2235)=1(.2238 4)=.22384
adc10=1023 gives us
result=1023((1023*.00034)+.2235)=1023(.34782+.2235 )=1023(.57132)=584.46036
Is this correct? Seems like quite a lot of work to scale an answer. what temps do the extremes represent?
-Bert
The glass is not half full or half empty, Its twice as big as needed for the job!
http://foamcasualty.com/ - Warbird R/C scratch building with foam!
Back up to post #8
The constants
.00034
.2235
Would be changed to
34
223
In your formula.
Then at the end you would divide by a power of ten.
If all of this fits into the variable type used
BYTE
WORD
LONG
then the result will be truncated to an integer.
Truncating to an integer is what you wanted...
Dave
Always wear safety glasses while programming.
Well, as was stated your question, ronsimpson did answer very good.
A simple thank would be OK if you did no liked the time he spent for you.
Anyway, PBP does not support FP directly. So tricks like the one suggested should be used.
A byte is 0-255 in range and a word 0-65535, so none will store you values as is.
Have a look at n-bit math here:
http://www.picbasic.co.uk/forum/show...ght=n-bit+math
or real Floating Point here:
http://melabs.com/resources/fp.htm
Ioannis
Make sure I have this right.
By defineing Result at a byte, this will round the result to byte lenght ?
Lets say I need a decimal like .0004
Would I need several lines of code or can I just use
Dec1 VAR WORD
Result VAR BYTE
Something VAR WORD
Dec1=1/2500 'this should be .0004 ' will this work ? or need DIV32
Result = Something * Dec1 ' something being between 0 and 500
Result is now rounded ?
Do I alway need a DIV32 when a want a decimal result ?
Bookmarks