A comparision of voting systems for the Singapore General Elections.

So the results for the Singaporean General Election 2015 were announced this evening, and having access to the vote counts from the reporting done, I decided to do a little comparison of voting systems.

Singapore’s parliament has 89 seats. Of these, about two thirds are allocated in multi-seat GRCs: win the majority in the GRC, and you get all the seats. (often 4-6 seats per GRC). The purpose of the GRCs is to increase minority representation in parliament, by setting rules on the composition of the teams that can contest a particular GRC. But it cannot be denied that this extreme form of a first past the post voting system generates large differences between the voting percentages and the seats won.

As an alternative to first past the post, proportional representation (PR) might be suggested. If just doing a simple nationwide proportional representation system, the seats would look like this:

  • PAP: 62 seats
  • WP: 11 seats
  • SDP: 4 seats
  • NSP: 3 seats
  • RP: 2 seats
  • SingFirst: 2 seats
  • SPP: 2 seats
  • SDA: 2 seats
  • PPP: 1 seat

Unfortunately, with this very simple method, the link between MPs and their local electors is lost. This seems to be a key part of Singaporean politics, so it might be preferable to work within the existing GRC structure, and use one of several PR systems in each GRC. In the 2015 elections, there were 16 GRCs, and each GRC had only two parties competing. This allows us to very simply apply either the D’Hondt method or the Saint LaguĂ« method to calculate how many seats respectively the PAP and the opposition in each seat would win if using these systems. The two methods differ, and produce different results for some GRCs. But for now, I shall concentrate on the D’Hondt method.

First thing to note: In each and every GRC, there would be at least one opposition candidate elected. This makes sense, since even the biggest margin victory for the PAP, which was Jurong, was about 80% to 20%. Jurong being a five member GRC, it might seem fair that four of these seats go to the PAP and one goes to the opposition. Indeed, both methods give this result.

Second case: Aljuined. This GRC was the closest fought one. The Workers’ party won by just over 2000 votes. Both methods would give the PAP 2 seats to the Workers’ party’s 3 seats.

To calculate these numbers, I wrote a 40 line C++ programme. For the D’Hondt method, the program reads as follows:

#include <stdio.h>
#include <iostream>

main() {

int pv, ov, s;
int ps, os;

printf(“PAP? \n”);
scanf(“%d”, &pv);
printf(“Opposition? \n”);
scanf(“%d”, &ov);
printf(“Seats? \n”);
scanf(“%d”, &s);

ps = 0;
os = 0;
std::cout << std::endl;

for (int i = 0; i < s; i++)

std::cout << pv/(ps+1.0) << std::endl;
std::cout << ov/(os+1.0) << std::endl;

if ( pv/(ps+1.0) > ov/(os+1.0) ) {
} else {

std::cout << ps << std::endl;
std::cout << os << std::endl << std::endl;

printf(“PAP seats: %d. Opp. seats: %d \n”, ps, os);

return 0;

Inputting the data for the East Coast GRC, we get the following interaction with my programme when using the D’Hondt method, where I will annotate as we go along:


This is my programme asking for data. I supply the number of votes cast for the PAP and the number of votes for the opposition, along with the number of seats in the GRC.


In the first stage, the PAP has the most votes, and thus gets a seat.


In the second stage, the PAPs number of votes gets divided by their number of seats plus one, that is, two. The same goes for the Workers’ party, although since they haven’t been awarded any seats yet, their vote number gets divided by zero plus one, that is one. These two numbers are compared, and the highest one gets the next seat. In this case the WP gets a seat.


At the third stage, both parties’ vote counts get divided by two, since both have earned one seat up to now. Now, the PAPs quotient is higher, so it gets an extra seat, bringing it up to two.


In the fourth stage, the PAP has to divide their votes by three, and the WP by two. The quotient for the PAP is higher though, so they get the fourth and final seat. With no more seats left to fill, the method terminates…

PAP seats: 3. Opp. seats: 1

…And the results are summarised.

So, how does this method fare for the other GRCs? In the following list, I give the number of seats for the PAP, followed by the number of seats for the opposition:

  • ALJ: 2-3
  • AMK: 5-1
  • BTP: 4-1
  • CCK: 3-1
  • EC: 3-1
  • HBT: 3-1
  • JBS: 3-1
  • JRG: 4-1
  • MRP: 3-2
  • MYT: 3-1
  • NSO: 4-1
  • PRP: 5-1
  • SBW: 4-1
  • TPN: 4-1
  • TPG: 4-1
  • WC: 3-1

Including the SMC MPs, where the results are not affected by applying D’Hondt, the PAP would get 69 seats under the D’Hondt system, which more accurately reflects its share of the votes (as opposed to the 83 out of 89 it gets under the existing system). At the same time, the connection between MPs and the GRC in which they were elected stays intact.


Author: jpamills

Website: www.jpamills.dk

%d bloggers like this: