473,383 Members | 1,795 Online
Bytes | Software Development & Data Engineering Community
Post Job

Home Posts Topics Members FAQ

Join Bytes to post your question to a community of 473,383 software developers and data experts.

Strange behaviour, multiplying decimals (IE)

Hi,

I'm building an IE-centric portal for an intranet so I've only had to
develop for IE 6+

My version is: 6.00290.2180

Here's what I'm seeing:

0.25 * 100 = 25
0.26 * 100 = 26
0.27 * 100 = 27

ok so far....

0.28 * 100 = 28.000000000000003
0.29 * 100 = 28.999999999999996
Not what I expected.
curiously, 0.299 yields what I'd expect, 29.9
Also, 0.299 * 1000 = 299, which is correct!

I iterated from 0.01 to 0.99 and these other combinations produce a
similar output:

0.07 * 100 = 7.000000000000001
0.14 * 100 = 14.000000000000001
0.55 * 100 = 55.00000000000001
0.56 * 100 = 56.00000000000001
0.57 * 100 = 56.99999999999999
0.58 * 100 = 57.99999999999999
Anyone know of a safe way of doing multiplication which will produce
the correct result and the right number of digits?

Thanks!

Sep 26 '07 #1
20 4529
wrote on 26 sep 2007 in comp.lang.javascript:
0.28 * 100 = 28.000000000000003
0.29 * 100 = 28.999999999999996
<http://www.jibbering.com/faq/#FAQ4_7>

--
Evertjan.
The Netherlands.
(Please change the x'es to dots in my emailaddress)
Sep 26 '07 #2
On Sep 26, 2:51 pm, "Evertjan." <exjxw.hannivo...@interxnl.netwrote:
wrote on 26 sep 2007 in comp.lang.javascript:
0.28 * 100 = 28.000000000000003
0.29 * 100 = 28.999999999999996

<http://www.jibbering.com/faq/#FAQ4_7>

--
Evertjan.
The Netherlands.
(Please change the x'es to dots in my emailaddress)


Initially I couldn't figure out how to use the code in 4.6. I finally
realized that the toFixed() protype was being overriden and all I had
to do was use it as follows:

before:
..29 * 100 = 28.999999999999996

after:
(.29 * 100).toFixed(0) = 29. (then I regex the decimal out)

Perhaps an example or an explanation is needed in the faq?

thanks!

Sep 26 '07 #3
wrote on 26 sep 2007 in comp.lang.javascript:
On Sep 26, 2:51 pm, "Evertjan." <exjxw.hannivo...@interxnl.netwrote:
> wrote on 26 sep 2007 in comp.lang.javascript:
0.28 * 100 = 28.000000000000003
0.29 * 100 = 28.999999999999996

<http://www.jibbering.com/faq/#FAQ4_7>
[please do not quote signatures on usenet,
any decent newsreader will skip those for you automagically]
Initially I couldn't figure out how to use the code in 4.6. I finally
realized that the toFixed() protype was being overriden and all I had
to do was use it as follows:
No, the default toFixed(n) was overridden, as it has a bug [in IE?]
before:
.29 * 100 = 28.999999999999996

after:
(.29 * 100).toFixed(0) = 29. (then I regex the decimal out)

Perhaps an example or an explanation is needed in the faq?
4.6 indirectly states that that toFixed(n) needs n>0

Will this save your day?

alert( +(.29 * 100).toFixed(0) );

[Look, no Regex]
--
Evertjan.
The Netherlands.
(Please change the x'es to dots in my emailaddress)
Sep 26 '07 #4
In comp.lang.javascript message <11********************@57g2000hsv.googl
egroups.com>, Wed, 26 Sep 2007 12:28:22, cr***********@gmail.com posted:
>On Sep 26, 2:51 pm, "Evertjan." <exjxw.hannivo...@interxnl.netwrote:
> wrote on 26 sep 2007 in comp.lang.javascript:
0.28 * 100 = 28.000000000000003
0.29 * 100 = 28.999999999999996

<http://www.jibbering.com/faq/#FAQ4_7>
The reference in that section is all very well, though the references to
Jscript may confuse the unwary a bit. But there should be a more user-
friendly URL that could be given as well.
>--
Evertjan.
The Netherlands.
(Please change the x'es to dots in my emailaddress)
Don't quote signatures,
>Initially I couldn't figure out how to use the code in 4.6.
Evertjan cited 4.6. He did not cite 4.6.
I finally
realized that the toFixed() protype was being overriden and all I had
to do was use it as follows:

before:
.29 * 100 = 28.999999999999996

after:
(.29 * 100).toFixed(0) = 29. (then I regex the decimal out)
If you know you want an integer, don't use toFixed or StrS; use
Math.round.

>Perhaps an example or an explanation is needed in the faq?
The version of function StrU in the FAQ is well-known to be out-of-date.

Method toFixed (bugs in the original apart) is OK for those who love
Methods. You can use StrS itself directly. Or StrU StrT StrW.

<FAQENTRYTo FAQ 4.7, new para 2.5 : "Otherwise, use Math.round on the
results of expressions which should be of integer value."; and move the
last sentence of 2.0 to precede that in 2.5.

--
(c) John Stockton, Surrey, UK. ?@merlyn.demon.co.uk Turnpike v6.05 MIME.
Web <URL:http://www.merlyn.demon.co.uk/- FAQish topics, acronyms, & links.
Proper <= 4-line sig. separator as above, a line exactly "-- " (SonOfRFC1036)
Do not Mail News to me. Before a reply, quote with ">" or "" (SonOfRFC1036)
Sep 26 '07 #5
Dr J R Stockton said the following on 9/26/2007 4:47 PM:
In comp.lang.javascript message <11********************@57g2000hsv.googl
egroups.com>, Wed, 26 Sep 2007 12:28:22, cr***********@gmail.com posted:
>On Sep 26, 2:51 pm, "Evertjan." <exjxw.hannivo...@interxnl.netwrote:
>> wrote on 26 sep 2007 in comp.lang.javascript:

0.28 * 100 = 28.000000000000003
0.29 * 100 = 28.999999999999996
<http://www.jibbering.com/faq/#FAQ4_7>
<snip>
>Initially I couldn't figure out how to use the code in 4.6.

Evertjan cited 4.6. He did not cite 4.6.
I am curious how you cite something you did not cite.

--
Randy
Chance Favors The Prepared Mind
comp.lang.javascript FAQ - http://jibbering.com/faq/index.html
Javascript Best Practices - http://www.JavascriptToolbox.com/bestpractices/
Sep 27 '07 #6
Randy Webb wrote on 27 sep 2007 in comp.lang.javascript:

John wrote:
>Evertjan cited 4.6. He did not cite 4.6.

I am curious how you cite something you did not cite.
The exegesis of the faq offers hidden gems.

--
Evertjan.
The Netherlands.
(Please change the x'es to dots in my emailaddress)
Sep 27 '07 #7
On Sep 26, 4:48 pm, "Evertjan." <exjxw.hannivo...@interxnl.netwrote:
wrote on 26 sep 2007 in comp.lang.javascript:
On Sep 26, 2:51 pm, "Evertjan." <exjxw.hannivo...@interxnl.netwrote:
wrote on 26 sep 2007 in comp.lang.javascript:
0.28 * 100 = 28.000000000000003
0.29 * 100 = 28.999999999999996
<http://www.jibbering.com/faq/#FAQ4_7>

[please do not quote signatures on usenet,
any decent newsreader will skip those for you automagically]


That's the magic of Google.
Initially I couldn't figure out how to use the code in 4.6. I finally
realized that the toFixed() protype was being overriden and all I had
to do was use it as follows:

No, the default toFixed(n) was overridden, as it has a bug [in IE?]
before:
.29 * 100 = 28.999999999999996
after:
(.29 * 100).toFixed(0) = 29. (then I regex the decimal out)
Perhaps an example or an explanation is needed in the faq?

4.6 indirectly states that that toFixed(n) needs n>0

Will this save your day?

alert( +(.29 * 100).toFixed(0) );

[Look, no Regex]
Yea, that's much nicer and it works.. thanks.

Sep 27 '07 #8
In comp.lang.javascript message <Xn********************@194.109.133.242>
, Wed, 26 Sep 2007 20:48:02, Evertjan. <ex**************@interxnl.net>
posted:
wrote on 26 sep 2007 in comp.lang.javascript:
>No, the default toFixed(n) was overridden, as it has a bug [in IE?]
The functions StrU StrS StrT StrW are more capable than method toFixed,
as they allow fixing the number of characters before the decimal point,
which is useful in Tables. Replacing default toFixed is a minor
addition. That should be emphasised in the FAQ, perhaps by adding a
comment line before the last line of code :
// StrS can be used to implement a better toFixed method

>before:
.29 * 100 = 28.999999999999996

after:
(.29 * 100).toFixed(0) = 29. (then I regex the decimal out)
Method replace does not require a RegExp. With a string for its first
parameter it is twice as fast, and code seems then of similar speed to
code using substring.

>Perhaps an example or an explanation is needed in the faq?

4.6 indirectly states that that toFixed(n) needs n>0
ISO/IEC 16262 allows n=0. However, it requires a decimal point, giving
a result incompatible with general good practice (IUPAP/SUNAMCO, IIRC,
refers) which is to have at least one digit on each side of the point;
that is why 4.6 disdains n=0. It does not state that n>0 is needed.

>Will this save your day?

alert( +(.29 * 100).toFixed(0) );

[Look, no Regex]
But it converts a Number to a String with toFixed, then back to a Number
with unary plus (which alert converts to String display). Math.round
should be much faster (nearly 4 times so, in IE6, it seems).

This function Sign(X) { return X>0 ? "+" : X<0 ? "-" : " " }
would be better than the Sign in the FAQ, particularly for use in Tables
(a sensible font will have plus minus and space all of the same width as
a digit). A newbie can more easily remove unwanted parts than add
missing ones.
It's a good idea to read the newsgroup c.l.j and its FAQ. See below.

--
(c) John Stockton, Surrey, UK. ?@merlyn.demon.co.uk Turnpike v6.05 IE 6
news:comp.lang.javascript FAQ <URL:http://www.jibbering.com/faq/index.html>.
<URL:http://www.merlyn.demon.co.uk/js-index.htmjscr maths, dates, sources.
<URL:http://www.merlyn.demon.co.uk/TP/BP/Delphi/jscr/&c, FAQ items, links.
Sep 27 '07 #9
Dr J R Stockton wrote on 27 sep 2007 in comp.lang.javascript:
>>4.6 indirectly states that that toFixed(n) needs n>0

ISO/IEC 16262 allows n=0.
We were discussing another toFixed(n),
not the default one.

--
Evertjan.
The Netherlands.
(Please change the x'es to dots in my emailaddress)
Sep 27 '07 #10
In comp.lang.javascript message <Xn********************@194.109.133.242>
, Thu, 27 Sep 2007 12:24:33, Evertjan. <ex**************@interxnl.net>
posted:
>Randy Webb wrote on 27 sep 2007 in comp.lang.javascript:

John wrote:
>>Evertjan cited 4.6. He did not cite 4.6.

I am curious how you cite something you did not cite.

The exegesis of the faq offers hidden gems.
Regrettably, the 6 in the main block my keyboard is dangerously close to
the 7. I should have used the keypad.

Let us hope that Randy has taken due cognisance of the rest of the
article.

--
(c) John Stockton, Surrey, UK. ?@merlyn.demon.co.uk Turnpike v6.05 MIME.
Web <URL:http://www.merlyn.demon.co.uk/- FAQqish topics, acronyms & links;
Astro stuff via astron-1.htm, gravity0.htm ; quotings.htm, pascal.htm, etc.
No Encoding. Quotes before replies. Snip well. Write clearly. Don't Mail News.
Sep 27 '07 #11
Dr J R Stockton said the following on 9/27/2007 6:06 AM:

<snip>
This function Sign(X) { return X>0 ? "+" : X<0 ? "-" : " " }
would be better than the Sign in the FAQ,
Replaced locally.
--
Randy
comp.lang.javascript FAQ - http://jibbering.com/faq/index.html
FAQ Notes: http://www.jibbering.com/faq/faq_notes/faq_notes.html
ECMAScript Language Specification via FAQ2.6
Sep 28 '07 #12
Dr J R Stockton said the following on 9/27/2007 5:36 PM:
In comp.lang.javascript message <Xn********************@194.109.133.242>
, Thu, 27 Sep 2007 12:24:33, Evertjan. <ex**************@interxnl.net>
posted:
>Randy Webb wrote on 27 sep 2007 in comp.lang.javascript:

John wrote:
>>>Evertjan cited 4.6. He did not cite 4.6.
I am curious how you cite something you did not cite.
The exegesis of the faq offers hidden gems.

Regrettably, the 6 in the main block my keyboard is dangerously close to
the 7. I should have used the keypad.

Let us hope that Randy has taken due cognisance of the rest of the
article.
I did. :-)

--
Randy
Chance Favors The Prepared Mind
comp.lang.javascript FAQ - http://jibbering.com/faq/index.html
Javascript Best Practices - http://www.JavascriptToolbox.com/bestpractices/
Sep 28 '07 #13
Dr J R Stockton said the following on 9/26/2007 4:47 PM:

<snip>
The version of function StrU in the FAQ is well-known to be out-of-date.
Then perhaps you would care to post a new updated version? And I will be
happy to add it. I am not going to hunt it down and guess at it though.
<FAQENTRYTo FAQ 4.7, new para 2.5 : "Otherwise, use Math.round on the
results of expressions which should be of integer value.";
Added locally.
and move the last sentence of 2.0 to precede that in 2.5.
I have to assume that your "2.0" is a typo as I have no 2.0 in my local
version. It would be even better if you simply did as you did above and
simply say "move this line to this location" instead of all the cryptic
crap.

--
Randy
comp.lang.javascript FAQ - http://jibbering.com/faq/index.html
FAQ Notes: http://www.jibbering.com/faq/faq_notes/faq_notes.html
ECMAScript Language Specification via FAQ2.6
Sep 28 '07 #14
FAQEditor wrote on 28 sep 2007 in comp.lang.javascript:
Dr J R Stockton said the following on 9/27/2007 6:06 AM:

<snip>
>This function Sign(X) { return X>0 ? "+" : X<0 ? "-" : " " }
would be better than the Sign in the FAQ,

Replaced locally.
Just playing:

function Sign(X) {return ' -+'.charAt(!X?0:X<0?1:2)}

function Sign(X) {return ' -+'.split('')[!X?0:X<0?1:2]}

--
Evertjan.
The Netherlands.
(Please change the x'es to dots in my emailaddress)
Sep 28 '07 #15
In comp.lang.javascript message <3v*********************@giganews.com>,
Thu, 27 Sep 2007 20:05:55, FAQEditor <cl****@comcast.netposted:
>Dr J R Stockton said the following on 9/26/2007 4:47 PM:
No; I posted it at Wed, 26 Sep 2007 21:47:19 +0100, having written it
before that time.

>The version of function StrU in the FAQ is well-known to be out-of-date.

Then perhaps you would care to post a new updated version? And I will
be happy to add it. I am not going to hunt it down and guess at it
though.
If you find the link in the FAQ inadequate, please explain why. It's
only one obvious step from there to js-rndg1.htm#GC .

><FAQENTRYTo FAQ 4.7, new para 2.5 : "Otherwise, use Math.round on the
results of expressions which should be of integer value.";

Added locally.
>and move the last sentence of 2.0 to precede that in 2.5.

I have to assume that your "2.0" is a typo as I have no 2.0 in my local
version.
If you understand "2.5", you should be able to understand "2.0". The
recommendation amounts to shifting a paragraph break.

--
(c) John Stockton, Surrey, UK. ?@merlyn.demon.co.uk Turnpike v6.05 MIME.
Web <URL:http://www.merlyn.demon.co.uk/- FAQish topics, acronyms, & links.
Proper <= 4-line sig. separator as above, a line exactly "-- " (SonOfRFC1036)
Do not Mail News to me. Before a reply, quote with ">" or "" (SonOfRFC1036)
Sep 28 '07 #16
In comp.lang.javascript message <Xn********************@194.109.133.242>
, Fri, 28 Sep 2007 15:26:01, Evertjan. <ex**************@interxnl.net>
posted:
>
function Sign(X) {return ' -+'.charAt(!X?0:X<0?1:2)}
function Sign(X) {return '+ -'.charAt(X<0?2:!X)} // is shorter

--
(c) John Stockton, Surrey, UK. ?@merlyn.demon.co.uk Turnpike v6.05 IE 6.
Web <URL:http://www.merlyn.demon.co.uk/- w. FAQish topics, links, acronyms
PAS EXE etc : <URL:http://www.merlyn.demon.co.uk/programs/- see 00index.htm
Dates - miscdate.htm moredate.htm js-dates.htm pas-time.htm critdate.htm etc.
Sep 28 '07 #17
Dr J R Stockton said the following on 9/28/2007 5:07 PM:
In comp.lang.javascript message <3v*********************@giganews.com>,
Thu, 27 Sep 2007 20:05:55, FAQEditor <cl****@comcast.netposted:
>Dr J R Stockton said the following on 9/26/2007 4:47 PM:

No; I posted it at Wed, 26 Sep 2007 21:47:19 +0100, having written it
before that time.
You should endeavor to understand how screen readers work. But, are we
back to the attribution BS again?
>
>>The version of function StrU in the FAQ is well-known to be out-of-date.
Then perhaps you would care to post a new updated version? And I will
be happy to add it. I am not going to hunt it down and guess at it
though.

If you find the link in the FAQ inadequate, please explain why.
Thanks, but no thanks. If you find the FAQ code inadequate and want it
changed, then you post a URL, or the code, to the group and then I will
change it.
It's only one obvious step from there to js-rndg1.htm#GC .
And in the time you have spent waffling about posting it you could have
simply posted the new code, it would have gotten updated locally -
probably online as well - and all would be moving along nicely. Instead,
we are having a conversation about steps and what is obvious to find in
a site that I find a nightmare to try to traverse.

>><FAQENTRYTo FAQ 4.7, new para 2.5 : "Otherwise, use Math.round on the
results of expressions which should be of integer value.";
Added locally.
>>and move the last sentence of 2.0 to precede that in 2.5.
I have to assume that your "2.0" is a typo as I have no 2.0 in my local
version.

If you understand "2.5", you should be able to understand "2.0". The
recommendation amounts to shifting a paragraph break.
If you can't understand that there is no 2.0 in the FAQ, then nothing
else would make sense to you either. Again, if you would simply state
what you think should be changed instead of being so moronically obtuse
about it then things would get updated a lot quicker than they do. Try
it sometime.

--
Randy
Chance Favors The Prepared Mind
comp.lang.javascript FAQ - http://jibbering.com/faq/index.html
Javascript Best Practices - http://www.JavascriptToolbox.com/bestpractices/
Sep 29 '07 #18
Dr J R Stockton wrote on 28 sep 2007 in comp.lang.javascript:
In comp.lang.javascript message Evertjan. posted:
>>
function Sign(X) {return ' -+'.charAt(!X?0:X<0?1:2)}

function Sign(X) {return '+ -'.charAt(X<0?2:!X)} // is shorter
Indeed.

This one is longer, but does not use any tertiary operator:

function Sign(X) {return ' +-'.charAt(!!X+(X<0))}

would it be faster?

--
Evertjan.
The Netherlands.
(Please change the x'es to dots in my emailaddress)
Sep 29 '07 #19
Evertjan. wrote on 29 sep 2007 in comp.lang.javascript:
Dr J R Stockton wrote on 28 sep 2007 in comp.lang.javascript:
>In comp.lang.javascript message Evertjan. posted:
>>>
function Sign(X) {return ' -+'.charAt(!X?0:X<0?1:2)}

function Sign(X) {return '+ -'.charAt(X<0?2:!X)} // is shorter

Indeed.

This one is longer, but does not use any tertiary operator:

function Sign(X) {return ' +-'.charAt(!!X+(X<0))}
Or we could compute the characters from their unicode value:

function Sign(X) {return String.fromCharCode(43-!X*11+(X<0)*2)}

--
Evertjan.
The Netherlands.
(Please change the x'es to dots in my emailaddress)
Sep 29 '07 #20
In comp.lang.javascript message <Xn********************@194.109.133.242>
, Sat, 29 Sep 2007 08:33:02, Evertjan. <ex**************@interxnl.net>
posted:
>Dr J R Stockton wrote on 28 sep 2007 in comp.lang.javascript:
>In comp.lang.javascript message Evertjan. posted:
>>>
function Sign(X) {return ' -+'.charAt(!X?0:X<0?1:2)}

function Sign(X) {return '+ -'.charAt(X<0?2:!X)} // is shorter
>This one is longer, but does not use any tertiary operator:

function Sign(X) {return ' +-'.charAt(!!X+(X<0))}

would it be faster?

Even including the one you posted next, the differences are
insignificant, and will depend on the sign of the argument and
therefore, overall, on the proportion of positive, negative, zero.

As most results are positive (IMHO), this should be insignificantly
better :

function Sign(X) {return '- +'.charAt(X>0?2:!X)}
--
(c) John Stockton, Surrey, UK. ?@merlyn.demon.co.uk Turnpike v6.05 MIME.
Web <URL:http://www.merlyn.demon.co.uk/- FAQqish topics, acronyms & links;
Astro stuff via astron-1.htm, gravity0.htm ; quotings.htm, pascal.htm, etc.
No Encoding. Quotes before replies. Snip well. Write clearly. Don't Mail News.
Sep 29 '07 #21

This thread has been closed and replies have been disabled. Please start a new discussion.

Similar topics

4
by: Torsten Reiners | last post by:
Hi, it might be a simple solution but I do not see it. The problem is that I have the following file stored on my local harddrive. All references are URL to a remote computer. It is working,...
24
by: David | last post by:
hello. when doing the simple following computation, the value put into the variable numMinusOne is NOT the same as what the computation is showed to be in the Watch window!! here is the code:...
3
by: Andrew Mayo | last post by:
(note: reason for posting here; browser helper object is written in C++; C++ developers tend to know the intricacies of message handling; this looks like a Windows messaging issue) Microsoft...
2
by: Olaf | last post by:
I have a frameset page witch contains the myFuc() function. The function is accessed from a page in one of the frames in the frameset. An example is shown below. <input...
3
by: Bruno van Dooren | last post by:
Hi All, i have some (3) different weird pointer problems that have me stumped. i suspect that the compiler behavior is correct because gcc shows the same results. ...
1
by: AP | last post by:
We commonly use this method to "pivot/crosstab" table results. For example lets say there are two offices, and we want the total sales for each ofice in its own column(Next to each other). We do...
2
by: k | last post by:
I have aproblem when multiplying 2 float 638.9 * 382.8 should = 244570.92 results giving 244570.922 both numbers are float variables , tried using double to...
9
by: luke | last post by:
Hi everybody, please, can someone explain me this behaviour. I have the following piece of code: long long ll; unsigned int i = 2; ll = -1 * i; printf("%lld\n", ll);
6
by: Kuldeep | last post by:
Hi All, I have this piece of code shown below: decimal ft = Convert.ToDecimal(txtft.Text); decimal inch = Convert.ToDecimal(txtin.Text); decimal metre = ((ft * 12) + inch) * 0.0254;
0
by: Faith0G | last post by:
I am starting a new it consulting business and it's been a while since I setup a new website. Is wordpress still the best web based software for hosting a 5 page website? The webpages will be...
0
isladogs
by: isladogs | last post by:
The next Access Europe User Group meeting will be on Wednesday 3 Apr 2024 starting at 18:00 UK time (6PM UTC+1) and finishing by 19:30 (7.30PM). In this session, we are pleased to welcome former...
0
by: ryjfgjl | last post by:
In our work, we often need to import Excel data into databases (such as MySQL, SQL Server, Oracle) for data analysis and processing. Usually, we use database tools like Navicat or the Excel import...
0
by: aa123db | last post by:
Variable and constants Use var or let for variables and const fror constants. Var foo ='bar'; Let foo ='bar';const baz ='bar'; Functions function $name$ ($parameters$) { } ...
0
by: ryjfgjl | last post by:
If we have dozens or hundreds of excel to import into the database, if we use the excel import function provided by database editors such as navicat, it will be extremely tedious and time-consuming...
0
by: ryjfgjl | last post by:
In our work, we often receive Excel tables with data in the same format. If we want to analyze these data, it can be difficult to analyze them because the data is spread across multiple Excel files...
0
by: emmanuelkatto | last post by:
Hi All, I am Emmanuel katto from Uganda. I want to ask what challenges you've faced while migrating a website to cloud. Please let me know. Thanks! Emmanuel
1
by: nemocccc | last post by:
hello, everyone, I want to develop a software for my android phone for daily needs, any suggestions?
1
by: Sonnysonu | last post by:
This is the data of csv file 1 2 3 1 2 3 1 2 3 1 2 3 2 3 2 3 3 the lengths should be different i have to store the data by column-wise with in the specific length. suppose the i have to...

By using Bytes.com and it's services, you agree to our Privacy Policy and Terms of Use.

To disable or enable advertisements and analytics tracking please visit the manage ads & tracking page.