Ну, я не думаю, что вам нужно использовать число с плавающей запятой ...
public static int Add(int a, int b)
{
int firstWhole = a / 1000;
int secondWhole = b / 1000;
int firstFraction = a % 1000;
int secondFraction = b % 1000;
int totalFraction = firstFraction + secondFraction;
int totalWhole = firstWhole + secondWhole + (totalFraction / 320);
return totalWhole * 1000 + (totalFraction % 320);
}
В качестве альтернативы, вы можете захотеть создать собственную структуру, которая может конвертировать в и из вашего целочисленного формата и перегружать оператор +. Это позволит вам написать более читаемый код, который случайно не приведет к тому, что другие целые числа будут рассматриваться как этот немного странный формат.
РЕДАКТИРОВАТЬ: Если вы вынуждены придерживаться формата «одно целое», но можете немного его откорректировать, вы можете рассмотреть возможность использования 512 вместо 1000. Таким образом, вы можете использовать простую маску и сдвиг:
public static int Add(int a, int b)
{
int firstWhole = a >> 9;
int secondWhole = b >> 9;
int firstFraction = a & 0x1ff
int secondFraction = b & 0x1ff;
int totalFraction = firstFraction + secondFraction;
int totalWhole = firstWhole + secondWhole + (totalFraction / 320);
return (totalWhole << 9) + (totalFraction % 320);
}
Там все еще возиться с 320, но, по крайней мере, несколько лучше.