Код: Выделить всё
public static Func Scale(int inputX, int inputY, int outputX, int outputY) {
if (inputX > inputY) {
var z = inputX;
inputX = inputY;
inputY = z;
}
if (outputX > outputY) {
var z = outputX;
outputX = outputY;
outputY = z;
}
var a = (((((double)inputScaleX) * (outputScaleX - outputScaleY)) / ((long)inputScaleY - inputScaleX)) + outputScaleX);
var m = (((double)(outputScaleY - outputScaleX)) / ((long)inputScaleY - inputScaleX));
return (value) => ((int)((value * m) + a));
}
Код: Выделить всё
Func scaler = Scale(long.MinValue, long.MaxValue, -5, 5);
var result = scaler(long.MaxValue - 3);
*За исключением прямого использования BigInt или реализации 64-битного умножения и деления в программном обеспечении; Я уже реализую эти операции в качестве обходного пути и ищу альтернативные решения, с которыми еще не сталкивался.
Подробнее здесь: https://stackoverflow.com/questions/589 ... arger-type
Мобильная версия