public Token split(Token ltoken, Token rtoken, double ratioToLeft) { BigDecimal left = ltoken.equals(MINIMUM) ? BigDecimal.ZERO : new BigDecimal(((BigIntegerToken)ltoken).token), right = rtoken.equals(MINIMUM) ? BigDecimal.ZERO : new BigDecimal(((BigIntegerToken)rtoken).token), ratio = BigDecimal.valueOf(ratioToLeft); BigInteger newToken; if (left.compareTo(right) < 0) { newToken = right.subtract(left).multiply(ratio).add(left).toBigInteger(); } else { // wrapping case // L + ((R - min) + (max - L)) * ratio BigDecimal max = new BigDecimal(MAXIMUM); newToken = max.add(right).subtract(left).multiply(ratio).add(left).toBigInteger().mod(MAXIMUM); } assert isValidToken(newToken) : "Invalid tokens from split"; return new BigIntegerToken(newToken); }
public Token split(Token ltoken, Token rtoken, double ratioToLeft) { BigDecimal left = ltoken.equals(MINIMUM) ? BigDecimal.ZERO : new BigDecimal(((BigIntegerToken)ltoken).token), right = rtoken.equals(MINIMUM) ? BigDecimal.ZERO : new BigDecimal(((BigIntegerToken)rtoken).token), ratio = BigDecimal.valueOf(ratioToLeft); BigInteger newToken; if (left.compareTo(right) < 0) { newToken = right.subtract(left).multiply(ratio).add(left).toBigInteger(); } else { // wrapping case // L + ((R - min) + (max - L)) * ratio BigDecimal max = new BigDecimal(MAXIMUM); newToken = max.add(right).subtract(left).multiply(ratio).add(left).toBigInteger().mod(MAXIMUM); } assert isValidToken(newToken) : "Invalid tokens from split"; return new BigIntegerToken(newToken); }
public Token split(Token ltoken, Token rtoken, double ratioToLeft) { BigDecimal left = ltoken.equals(MINIMUM) ? BigDecimal.ZERO : new BigDecimal(((BigIntegerToken)ltoken).token), right = rtoken.equals(MINIMUM) ? BigDecimal.ZERO : new BigDecimal(((BigIntegerToken)rtoken).token), ratio = BigDecimal.valueOf(ratioToLeft); BigInteger newToken; if (left.compareTo(right) < 0) { newToken = right.subtract(left).multiply(ratio).add(left).toBigInteger(); } else { // wrapping case // L + ((R - min) + (max - L)) * ratio BigDecimal max = new BigDecimal(MAXIMUM); newToken = max.add(right).subtract(left).multiply(ratio).add(left).toBigInteger().mod(MAXIMUM); } assert isValidToken(newToken) : "Invalid tokens from split"; return new BigIntegerToken(newToken); }
public Token split(Token ltoken, Token rtoken, double ratioToLeft) { BigDecimal left = ltoken.equals(MINIMUM) ? BigDecimal.ZERO : new BigDecimal(((BigIntegerToken)ltoken).token), right = rtoken.equals(MINIMUM) ? BigDecimal.ZERO : new BigDecimal(((BigIntegerToken)rtoken).token), ratio = BigDecimal.valueOf(ratioToLeft); BigInteger newToken; if (left.compareTo(right) < 0) { newToken = right.subtract(left).multiply(ratio).add(left).toBigInteger(); } else { // wrapping case // L + ((R - min) + (max - L)) * ratio BigDecimal max = new BigDecimal(MAXIMUM); newToken = max.add(right).subtract(left).multiply(ratio).add(left).toBigInteger().mod(MAXIMUM); } assert isValidToken(newToken) : "Invalid tokens from split"; return new BigIntegerToken(newToken); }