In BASIC the result of PRINT INT(1.234) <> 1.234 is -1. Anyone explain why? Richard

0 |

12/17/2016 3:10:26 PM

In article <55efeec45bbasura@invalid.addr.uk>, Richard Ashbery <basura@invalid.addr.uk> wrote: > In BASIC the result of PRINT INT(1.234) <> 1.234 is -1. > Anyone explain why? What do you expect INT(1.234) to be? The Integer part of 1.234 is 1 ... which is indeed not equal to 1.234. So the result is TRUE ... which is -1 And the result is PRINTed so shows -1. I fear you have a misconception somewhere? -- Martin Avison Note that unfortunately this email address will become invalid without notice if (when) any spam is received.

0 |

12/17/2016 3:45:13 PM

Richard Ashbery, on 17 Dec, wrote: > In BASIC the result of PRINT INT(1.234) <> 1.234 is -1. Anyone explain > why? P. INT(1.234)<>1.234 -1 P. INT(1.234)=1.234 0 P. TRUE -1 P.FALSE 0 -- David Pitt

0 |

12/17/2016 3:49:58 PM

In article <55eff1f3c1News03@avisoft.f9.co.uk>, Martin <News03@avisoft.f9.co.uk> wrote: > In article <55efeec45bbasura@invalid.addr.uk>, Richard Ashbery > <basura@invalid.addr.uk> wrote: > > In BASIC the result of PRINT INT(1.234) <> 1.234 is -1. Anyone > > explain why? > What do you expect INT(1.234) to be? The Integer part of 1.234 is 1 > ... which is indeed not equal to 1.234. So the result is TRUE ... > which is -1 And the result is PRINTed so shows -1. > I fear you have a misconception somewhere? I think you are being polite, Martin My problem came when I did the calculation using BBC BASIC for Windows and got different results when they should be the same. The full statement was... PRINT INT(1.234) - (INT(1.234) <> 1.234) It was my error - I had forgotten to put brackets around the INT(1.234) <> 1.234 part on the RISC OS machine which obviously gives a different result. The correct result is 2 not -1. Sorry for wasting your time. Richard

0 |

12/17/2016 4:31:55 PM

In article <55eff63a0fbasura@invalid.addr.uk>, Richard Ashbery <basura@invalid.addr.uk> wrote: > In article <55eff1f3c1News03@avisoft.f9.co.uk>, Martin > <News03@avisoft.f9.co.uk> wrote: > > In article <55efeec45bbasura@invalid.addr.uk>, Richard Ashbery > > <basura@invalid.addr.uk> wrote: > > > In BASIC the result of PRINT INT(1.234) <> 1.234 is -1. Anyone > > > explain why? > > What do you expect INT(1.234) to be? The Integer part of 1.234 is 1 > > ... which is indeed not equal to 1.234. So the result is TRUE ... > > which is -1 And the result is PRINTed so shows -1. > My problem came when I did the calculation using BBC BASIC for Windows > and got different results when they should be the same. The full > statement was... > PRINT INT(1.234) - (INT(1.234) <> 1.234) Ahah! So it was only half of the question. > It was my error - I had forgotten to put brackets around the > INT(1.234) <> 1.234 part on the RISC OS machine which obviously gives > a different result. The correct result is 2 not -1. So are you really asking: how do I round up a real number to the next whole integer? Or something more obscure. If rounding up, a simpler way might be PRINT INT(1.234 + 0.9999) (as long as the number of 9's exceeds the digits after the decimal point) A common requirement is to 'half adjust' ie round to the nearest integer, which is usually done by PRINT INT(1.234 + 0.5) Martin -- Martin Avison Note that unfortunately this email address will become invalid without notice if (when) any spam is received.

0 |

12/18/2016 9:57:32 AM

In article <55f055f4edNews03@avisoft.f9.co.uk>, Martin <News03@avisoft.f9.co.uk> wrote: > In article <55eff63a0fbasura@invalid.addr.uk>, Richard Ashbery > <basura@invalid.addr.uk> wrote: > > In article <55eff1f3c1News03@avisoft.f9.co.uk>, Martin > > <News03@avisoft.f9.co.uk> wrote: > > > In article <55efeec45bbasura@invalid.addr.uk>, Richard Ashbery > > > <basura@invalid.addr.uk> wrote: > > > > In BASIC the result of PRINT INT(1.234) <> 1.234 is -1. > > > > Anyone explain why? > > > What do you expect INT(1.234) to be? The Integer part of 1.234 > > > is 1 ... which is indeed not equal to 1.234. So the result is > > > TRUE ... which is -1 And the result is PRINTed so shows -1. > > My problem came when I did the calculation using BBC BASIC for > > Windows and got different results when they should be the same. > > The full statement was... > > PRINT INT(1.234) - (INT(1.234) <> 1.234) > Ahah! So it was only half of the question. > > It was my error - I had forgotten to put brackets around the > > INT(1.234) <> 1.234 part on the RISC OS machine which obviously > > gives a different result. The correct result is 2 not -1. > So are you really asking: how do I round up a real number to the > next whole integer? Or something more obscure. Rounding up yes - nothing more obscure - I was curious as to why the programmer gave this rather complicated example so tried running it on both Windows and RISC OS. When I got a different answer I began to doubt my understanding of INT(1.234) <> 1.234 which you correctly verified gives -1 (equiv. TRUE). > If rounding up, a simpler way might be PRINT INT(1.234 + 0.9999) > (as long as the number of 9's exceeds the digits after the decimal > point) Agreed. > A common requirement is to 'half adjust' ie round to the nearest > integer, which is usually done by PRINT INT(1.234 + 0.5) I don't suppose you have some examples. No seriously lets not pursue this any further - you have helped me enough already. Many thanks Richard

0 |

12/18/2016 11:09:26 AM

On 18 Dec, Richard Ashbery wrote in message <55f05c892abasura@invalid.addr.uk>: > In article <55f055f4edNews03@avisoft.f9.co.uk>, Martin > <News03@avisoft.f9.co.uk> wrote: > > > A common requirement is to 'half adjust' ie round to the nearest > > integer, which is usually done by PRINT INT(1.234 + 0.5) > > I don't suppose you have some examples. No seriously lets not pursue this > any further - you have helped me enough already. You can always hit the Delete key... :-) In fact, Martin has already given you the example: PRINT INT(1.234 + 0.5) That's it. PRINT INT(value + 0.5) will always print value rounded to the nearest integer. -- Steve Fryatt - Leeds, England http://www.stevefryatt.org.uk/

0 |

12/18/2016 12:10:05 PM

In article <55f05c892abasura@invalid.addr.uk>, Richard Ashbery <basura@invalid.addr.uk> wrote: > > A common requirement is to 'half adjust' ie round to the nearest > > integer, which is usually done by PRINT INT(1.234 + 0.5) > I don't suppose you have some examples. No seriously lets not pursue > this any further - you have helped me enough already. There is a whole science devoted th this problem with lots of choices available. The more you look into floating point type maths on a computer it gets harder to decide what you actually want to acheive. Even simple computations can give weird results such as NAN's (Not A Number). Google for further insight. Ron -- MrRonMan@GMail.com

0 |

12/18/2016 12:54:28 PM

In article <mpro.oidr4g01wvh4s02oh.news@stevefryatt.org.uk>, Steve Fryatt <news@stevefryatt.org.uk> wrote: > On 18 Dec, Richard Ashbery wrote in message > <55f05c892abasura@invalid.addr.uk>: > > In article <55f055f4edNews03@avisoft.f9.co.uk>, Martin > > <News03@avisoft.f9.co.uk> wrote: > > > > > A common requirement is to 'half adjust' ie round to the > > > nearest integer, which is usually done by PRINT INT(1.234 + 0.5) > > > > I don't suppose you have some examples. No seriously lets not > > pursue this any further - you have helped me enough already. > You can always hit the Delete key... :-) :-) > In fact, Martin has already given you the example: > PRINT INT(1.234 + 0.5) > That's it. > PRINT INT(value + 0.5) > will always print value rounded to the nearest integer.

0 |

12/18/2016 3:44:08 PM

In article <55f06627bdRon@GMail.com>, Ron <Ron@GMail.com> wrote: > Even simple computations can give weird results such as NAN's (Not A > Number). Depends if you are a Prisoner or not. ;-) Dave -- Dave Triffid

0 |

12/18/2016 4:15:14 PM

Martin wrote: > So are you really asking: how do I round up a real number to the next > whole integer? Or something more obscure. > > If rounding up, a simpler way might be > PRINT INT(1.234 + 0.9999) > (as long as the number of 9's exceeds the digits after the decimal point) I think this works, too: PRINT -INT(-float) INT with negative numbers rounds up, towards zero.

0 |

12/18/2016 4:15:57 PM

On 18/12/2016 16:15, Steve Drain wrote: > Martin wrote: >> So are you really asking: how do I round up a real number to the next >> whole integer? Or something more obscure. >> >> If rounding up, a simpler way might be >> PRINT INT(1.234 + 0.9999) >> (as long as the number of 9's exceeds the digits after the decimal point) > > I think this works, too: > > PRINT -INT(-float) > > INT with negative numbers rounds up, towards zero. Blast! I meant to say: > INT with negative numbers also rounds down, away from zero.

0 |

12/18/2016 4:18:40 PM

In article <o36css$kcm$2@gioia.aioe.org>, Steve Drain <steve@kappa.me.uk> wrote: > On 18/12/2016 16:15, Steve Drain wrote: > > Martin wrote: > >> So are you really asking: how do I round up a real number to the next > >> whole integer? Or something more obscure. > >> > >> If rounding up, a simpler way might be PRINT INT(1.234 + 0.9999) (as > >> long as the number of 9's exceeds the digits after the decimal point) > > > > I think this works, too: > > > > PRINT -INT(-float) > > > > INT with negative numbers rounds up, towards zero. > Blast! I meant to say: > > INT with negative numbers also rounds down, away from zero. This is now reminding me of the snags I encountered when developing the idea of 'bitfreezing' the least significant bits in 'high resolution' LPCM audio values. The reason being to reduce the size of flac files without losing any genuine info. The snag is that you need to set all the least significant bits to zeros, regardless of the sign of the values. So risk generating a dc offset because the meaning of a zero in these bits depends on the sign bit. Jim -- Electronics http://www.st-and.ac.uk/~www_pa/Scots_Guide/intro/electron.htm Armstrong Audio http://www.audiomisc.co.uk/Armstrong/armstrong.html Audio Misc http://www.audiomisc.co.uk/index.html

0 |

12/18/2016 4:56:55 PM

In article <55f078892edave@triffid.co.uk>, Dave Symes <dave@triffid.co.uk> wrote: > In article <55f06627bdRon@GMail.com>, Ron <Ron@GMail.com> wrote: > > Even simple computations can give weird results such as NAN's > > (Not A Number). > Depends if you are a Prisoner or not. ;-) > Dave LOL Richard

0 |

12/18/2016 5:04:56 PM

In article <o36css$kcm$2@gioia.aioe.org>, Steve Drain <steve@kappa.me.uk> wrote: > On 18/12/2016 16:15, Steve Drain wrote: > > Martin wrote: > >> So are you really asking: how do I round up a real number to the > >> next whole integer? Or something more obscure. > >> > >> If rounding up, a simpler way might be PRINT INT(1.234 + 0.9999) > >> (as long as the number of 9's exceeds the digits after the > >> decimal point) > > > > I think this works, too: > > > > PRINT -INT(-float) > > > > INT with negative numbers rounds up, towards zero. > Blast! I meant to say: > > INT with negative numbers also rounds down, away from zero. -INT(-1) gives 1 so rounds down, away from zero. I'm becoming esoterically challenged :-) Richard

0 |

12/18/2016 5:08:42 PM

In message <55f07d6e27basura@invalid.addr.uk> Richard Ashbery <basura@invalid.addr.uk> wrote: > In article <o36css$kcm$2@gioia.aioe.org>, Steve Drain > <steve@kappa.me.uk> wrote: >> On 18/12/2016 16:15, Steve Drain wrote: >>> Martin wrote: >>>> So are you really asking: how do I round up a real number to the >>>> next whole integer? Or something more obscure. >>>> >>>> If rounding up, a simpler way might be PRINT INT(1.234 + 0.9999) >>>> (as long as the number of 9's exceeds the digits after the >>>> decimal point) >>> >>> I think this works, too: >>> >>> PRINT -INT(-float) >>> >>> INT with negative numbers rounds up, towards zero. >> Blast! I meant to say: >>> INT with negative numbers also rounds down, away from zero. > -INT(-1) gives 1 so rounds down, away from zero. > I'm becoming esoterically challenged :-) > Richard but -INT(-1.3) produces 2, i.e rounds up. -- Alan Adams, from Northamptonshire alan@adamshome.org.uk http://www.nckc.org.uk/

0 |

12/18/2016 5:19:36 PM

In article <036e7ef055.Alan.Adams@ArmX6.adamshome.org.uk>, Alan Adams <alan@adamshome.org.uk> wrote: > In message <55f07d6e27basura@invalid.addr.uk> Richard Ashbery > <basura@invalid.addr.uk> wrote: > > In article <o36css$kcm$2@gioia.aioe.org>, Steve Drain > > <steve@kappa.me.uk> wrote: > >> On 18/12/2016 16:15, Steve Drain wrote: > >>> Martin wrote: > >>>> So are you really asking: how do I round up a real number to > >>>> the next whole integer? Or something more obscure. > >>>> > >>>> If rounding up, a simpler way might be PRINT INT(1.234 + > >>>> 0.9999) (as long as the number of 9's exceeds the digits after > >>>> the decimal point) > >>> > >>> I think this works, too: > >>> > >>> PRINT -INT(-float) > >>> > >>> INT with negative numbers rounds up, towards zero. > >> Blast! I meant to say: > >>> INT with negative numbers also rounds down, away from zero. > > -INT(-1) gives 1 so rounds down, away from zero. > > I'm becoming esoterically challenged :-) > > Richard > but -INT(-1.3) produces 2, i.e rounds up. That's what I mean about esoteric. Somebody will be along to explain it. Richard

0 |

12/18/2016 7:10:14 PM

In message <55f0888e16basura@invalid.addr.uk> Richard Ashbery <basura@invalid.addr.uk> wrote: > In article <036e7ef055.Alan.Adams@ArmX6.adamshome.org.uk>, Alan Adams > <alan@adamshome.org.uk> wrote: >> In message <55f07d6e27basura@invalid.addr.uk> Richard Ashbery >> <basura@invalid.addr.uk> wrote: >>> In article <o36css$kcm$2@gioia.aioe.org>, Steve Drain >>> <steve@kappa.me.uk> wrote: >>>> On 18/12/2016 16:15, Steve Drain wrote: >>>>> Martin wrote: >>>>>> So are you really asking: how do I round up a real number to >>>>>> the next whole integer? Or something more obscure. >>>>>> >>>>>> If rounding up, a simpler way might be PRINT INT(1.234 + >>>>>> 0.9999) (as long as the number of 9's exceeds the digits after >>>>>> the decimal point) >>>>> >>>>> I think this works, too: >>>>> >>>>> PRINT -INT(-float) >>>>> >>>>> INT with negative numbers rounds up, towards zero. >>>> Blast! I meant to say: >>>>> INT with negative numbers also rounds down, away from zero. >>> -INT(-1) gives 1 so rounds down, away from zero. >>> I'm becoming esoterically challenged :-) >>> Richard >> but -INT(-1.3) produces 2, i.e rounds up. > That's what I mean about esoteric. Somebody will be along to explain > it. > Richard OK. INT always rounds down, i.e. towards more negative values, or less positive values. Frequently people want one of two other behaviours. One is rounding, i.e. to the nearest integer. This is usually done with INT(variable + 0.5). Thus 1.3 would result in INT(1.8) which returns 1. 1.6 would result in INT(2.1) which returns 2. The other is returning a number closer to 0. This is the same as INT for positive values, but not the same for negative values. For negative numbers -INT(-<value>) works. However it doesn't work when value is positive, so a test for the sign is needed. One solution is SGN(value) * INT(ABS(value)) SGN returns 1 for positive values, -1 for negative and 0 for 0. ABS value returns the valuie as a positive number, the INT truncates it to an integer. Multiplying them restores the sign to the result. This then returns the integer closer to zero. For nearest integer, for both positive and negative numbers you could use SGN(value) * INT(ABS(value)+0.5) To make things more manageable I would use DEF FNround(I) =SGN(I) * INT(ABS(I)+0.5) And use FNround(J) to return a rounded value for J You should also be aware that using integer variables - those whose names end in % - does an implicit INT function when its value is assigned. i.e. I%=1.3 results in 1, I%=-1.3 results in -2. -- Alan Adams, from Northamptonshire alan@adamshome.org.uk http://www.nckc.org.uk/

0 |

12/18/2016 7:36:35 PM

Martin wrote: > So are you really asking: how do I round up a real number to the next > whole integer? If rounding up, a simpler way might be PRINT INT(1.234 > + 0.9999) (as long as the number of 9's exceeds the digits after > the decimal point) In reply, and specifically relating to rounding up: Steve Drain wrote: > I think this works, too: > PRINT -INT(-float) This has got a bit out of hand, which is my fault for leaving the explanation as 'an exercise for the reader'. ;-( Alan Adams wrote: > The other is returning a number closer to 0. This is the same as INT > for positive values, but not the same for negative values. > > For negative numbers -INT(-<value>) works. However it doesn't work > when value is positive, so a test for the sign is needed. For me, the use of that expression was solely for rounding up, away from zero and both positive and negative values. > You should also be aware that using integer variables - those whose > names end in % - does an implicit INT function when its value is > assigned. i.e. I%=1.3 results in 1, I%=-1.3 results in -2. That is not correct. Assigning to an integer variable strips the floating point part [1], so effectively rounds towards zero, I%=-1.3 results in -1, not -2. So, rounding towards zero is much more simply achieved by assigning a float to an integer variable. i%=<float> PRINT i% > [snip] > DEF FNround(I) > =SGN(I) * INT(ABS(I)+0.5) If you want it in a function: DEF FNround(i%)=i% PRINT FNround(<float>) [1] A necessary warning is needed about possible odd results owing to the imprecision of the floating point representation.

0 |

12/19/2016 10:50:17 AM