|
I once wrote a cost analysis system for Hyundai that took 90 minutes to recalculate. I was disgusted with it as it only got within 1m of reality, the boss was ecstatic, he could only get within 10m using his system.
Never underestimate the power of human stupidity -
RAH
I'm old. I know stuff - JSOP
|
|
|
|
|
I don't think we know that for a fact - the press widely reported something along those lines, but...
|
|
|
|
|
#realJSOP wrote: What retard decided that storing vote counts as floating point numbers was a "good idea"?
The programmers responsible should be hanged, drawn, and quartered for their efforts, and especially for their "design". However, the accuracy problems are mitigated by the following:
- Assuming only one voting machine per precinct, the number of voters would have to pass 2^24 (16,777,216) before problems would start. Most (all?) precincts in the US aren't that large.
- Given (1), When calculating the results of local elections, or elections to the House of Representatives, the results will be accurate.
- The population of California, the largest State, may be represented using 26 bits, i.e. the result will be inaccurate in the last 2 bits. Given that there are ~50 counties, the chance that a vote will be lost at the county level is small (a candidate would have to get more than 2^24 votes, probably more than the total voter register of any single county). When summing the county totals for a State-wide vote (i.e. Gubernatorial, Federal Senate, or Presidential elections), it is possible that a candidate would lose (or gain) a few votes due to round-off. Assuming no State-wide election is decided by less than ~200 votes, any errors are immaterial.
#realJSOP wrote: Even more importantly, why would anyone use software that was demonstrably accuracy-challenged and so easily corrupted?
Isn't what's good enough for Tilt Cove, Newfoundland good enough for the entire USA?
Freedom is the freedom to say that two plus two make four. If that is granted, all else follows.
-- 6079 Smith W.
|
|
|
|
|
|
Given that world population is much smaller than 264 (~1019), I would think that using a ulong (C#) or unsigned long long (C or C++) would be more than adequate.
Even assuming that human population doubles every 35 years, this still gives room for ~30-31 doublings, which will take ~1050-1085 years. In 3070 I expect to be safely retired.
Freedom is the freedom to say that two plus two make four. If that is granted, all else follows.
-- 6079 Smith W.
|
|
|
|
|
Yeah but you're forgetting about the dead....they can vote too
|
|
|
|
|
OK, so remove one doubling. I'll also be retired in 3035.
Freedom is the freedom to say that two plus two make four. If that is granted, all else follows.
-- 6079 Smith W.
|
|
|
|
|
Knowing where the "revelations" come from: it is just another case of total b******t.
Yes: floating point may cause a slight difference or rounding error here or there but they pale into insignificance. Only total ignorance and the wish to peddle that to those who don't have a clue either is the reason behind spreading this.
Being a long time developer I know better, no way on earth do you lose "millions of votes" because of it, you only have yourself to thank for that.
|
|
|
|
|
#realJSOP wrote: What retard decided that storing vote counts as floating point numbers was a "good idea"? It's not a good idea, but it doesn't seem to be as bad as you are implying. You would have to do far more testing than this simple program, and on the specific hardware of the machines, but on my machine it doesn't change the count by a single vote, even when using almost three times more people than there are in the US.
#include <iostream>
int main() {
__int64 test = 0;
double d = 0;
for (int i=0; i<16777216; ++i) {
d = d + 1;
}
std::cout << d << std::endl;
d = 0;
for (__int64 i=0; i<1000000000; ++i) {
d = d+1;
}
std::cout << d;
return 0;
}
|
|
|
|
|
What about with single-precision?
|
|
|
|
|
Change the double to float and try. And change the 10 billion to 16777215. Still no votes changed on my system.
|
|
|
|
|
Python developers maybe?
However, I am reminded of when I was first learning to write programs in BASIC-PLUS on a PDP-11 in 1983, the book clearly states:
"floating point calculations are more accurate than integer calculations"
and
"integers have a range only from -32768% to +32767%"
We did everything in floating point and had no idea why anyone would ever use integers.
(OK, VAXBASIC uses 32-bit integers.)
|
|
|
|
|
Come on John. As someone who writes code for a living, you know better than this.
It really doesn't matter the type when dealing with integers.
In a float, 1.0 + 1.0 still equals 2.0. Even accounting for representation inaccuracies, which you know always happens on the fractional side, how many votes would you have to count by adding 1.0 before you get anywhere near an integer misrepresentation by addition?
How great would the error really be? A couple of votes in either direction?
|
|
|
|
|
For the floating voter of course!
|
|
|
|
|
Ghost voters! We've had them in Chicago for quite a while now.
GHOST VOTERS RAISE SPECTER OF SHADY ELECTION - Chicago Tribune[^]
"the debugger doesn't tell me anything because this code compiles just fine" - random QA comment
"Facebook is where you tell lies to your friends. Twitter is where you tell the truth to strangers." - chriselst
"I don't drink any more... then again, I don't drink any less." - Mike Mullikins uncle
|
|
|
|
|
#realJSOP wrote: Why would any self-respecting developer agree to write code in such a way as to allow subversion of its targeted purpose?
No, you misunderstand, the software did perform its purpose. It was originally developed in Venezuela to help Hugo Chavez win "elections."
#realJSOP wrote: Even more importantly, why would anyone use software that was demonstrably accuracy-challenged and so easily corrupted?
Could the fact that Nancy Pelosi's husband has an ownership stake in the company have anything to do with it?
The difficult we do right away...
...the impossible takes slightly longer.
|
|
|
|
|
Lots of reasons I can think of for designs that seem to not make sense (and obviously not all of these apply to the system we're talking about)
- the person ultimately responsible for making the decision didn't know what questions to ask and/or didn't understand the technology
- the person responsible was pressured by a superior to make a bad call
- the product was chosen based on a relationship/favour, and not because it was the best/cheapest option
- the product was created by a consultancy service that had a bunch of devs on staff (eg COBOL) that it couldn't find work on so architected the project to use a technology that would allow it to bill the idle bodies (I'm looking at you, new Australian Taxation System)
- the decision was made due to security / technology / hardware / resource reasons that, once you understand the constraints, actually make sense for that application
- the system was based off a system that's based off a system that's based etc etc and has proven to be solid and reliable and hence reduced uncertainty. (Ask Boeing how well this strategy works over time)
I'm sure there's a bunch of reasons that made sense at the time. They may not make sense now, however. But who's going to invest the money to redo something when "it just works" (I should add some asterixis to that)
cheers
Chris Maunder
|
|
|
|
|
Who you want to be fired? The Dev who made the count variable to be 'float'? What makes you think it's Dev problem? What if it's intentionally done from upper management. IMHO, I think the Chief should be fired.
The best way to make your dreams come true is to wake up.
Paul Valery
|
|
|
|
|
I'm not taken aback at all, in fact I'll go as far as to say that it might be the best way to design such a system!
The idea that Dominion stores vote counts in a floating-point format seems to come from a NIST publication[^] describing a reporting standard. I don't think it's been proven that the Dominion software uses the described format, though I would not find it at all surprising if it did. This is an open standard, the creation of which involved the expertise of very smart, thoughtful, and experienced people, probably with strong knowledge of the problem domain. They are named as authors, if you question their work you may look them up and contact them to find out for yourself what their motivations were.
The standard specifies that aggregate vote counts are reported as double-precision floating-point numbers, which it says "can include a f[r]actional component in special cases" (though the nature of such special cases is not described). How individual votes are stored in the machines is not specified (as this is intended as a generalized rather than machine-specific standard), the document only addresses how counts are aggregated for the purpose of reporting. Even if individual votes were recorded by a voting machine as a floating-point whole number (again, a fact which is not in evidence), it would require astronomically more addition operations than there are voters (let alone people) in the U.S. in order to reach a rounding error of even a single vote.
In short, you can't possibly be certain that there's a problem here, but even your worst case scenario would result in effectively zero inaccuracy in the reported counts from the various Dominion systems in use.
|
|
|
|
|
Yep, it's nonsense.
I've tracked this down as best I could. The origin seems to be this (nearly 5 year old) article in Black Box Voting:
Fraction Magic — Part 2: Context, Background, Deeper, Worse – BlackBoxVoting.org
It seems that one person (a developer and poll worker) noticed that in his precinct, if you subtract the "number of people who didn't vote in this race" from the "total people who voted" (yielding the total who DID vote in that race), that number was one more than the number you get if you add up all the voted each candidate got. (since that race had 199 write-ins, it quite believable that one write-in wasn't readable and didn't make the counts, which would explain that -- but our guy doesn't like simple solutions). He figured it must be a floating-point round-off error!!
So, he read thru Diebold's (Yes, this is about Diebold -- not Dominion!) apparently public bugtrak database (from 2001!), and spotted a few bugs related to decimal places in their outputs --- and he concluded that the votes were being tabulated in floating point. In reality, they were actually talking about where they display the PERCENTAGE of the vote each candidate got, which, in these days of ever closer elections, must be given in multiple decimal place.
SO, to conclude: There is ZERO evidence that any voting system manufacture uses floating point to count votes.
Truth,
James
|
|
|
|
|
I'm taken aback.
Actually, I think that all election software should be entirely open source and verified by real programmers. Also, this technique of moving numbers from a scanner to an aggregator by little SD cards leaves too much room for sleight of hand. And ballots in Pennsylvania have bar codes. Whether or not they can be associated with an individual voter I don't know. There is one state using all mail in voting in which the voters themselves can login and verify that their vote has been recorded properly. Things can be so much improved. Having RCV and better candidates would help a lot.
|
|
|
|
|
Reminds me of a lottery programming scam.
On certain days of the year, it would use a different, predictable algorithm to generate the winning numbers. The authorities caught on after multiple relatives hit million dollar jackpots.
|
|
|
|
|
First, quick disclosure, my "expertise" with Roselyn and code generators is whooping whole hour just now!
(using Google as my all knowing tutor )
My verdict about them, right, it's good to have but... they are a bitch to use!
|
|
|
|
|
|
not quite what I had in mind!
|
|
|
|