Java Code Examples for java.math.BigInteger#longValueExact()

The following examples show how to use java.math.BigInteger#longValueExact() . These examples are extracted from open source projects. You can vote up the ones you like or vote down the ones you don't like, and go to the original project or source file by following the links above each example. You may check out the related API usage on the sidebar.
Example 1
@Override
public long getCpuForData(byte[] data) {

    if (data == null) {
        data = ByteUtil.EMPTY_BYTE_ARRAY;
    }

    int baseLen = parseLen(data, 0);
    int expLen = parseLen(data, 1);
    int modLen = parseLen(data, 2);

    byte[] expHighBytes = ByteUtil.parseBytes(data, BIUtil.addSafely(ARGS_OFFSET, baseLen), Math.min(expLen, 32));

    long multComplexity = getMultComplexity(Math.max(baseLen, modLen));
    long adjExpLen = getAdjustedExponentLength(expHighBytes, expLen);

    // use big numbers to stay safe in case of overflow
    BigInteger cpu = BigInteger.valueOf(multComplexity)
            .multiply(BigInteger.valueOf(Math.max(adjExpLen, 1)))
            .divide(GQUAD_DIVISOR);

    return BIUtil.isLessThan(cpu, BigInteger.valueOf(Long.MAX_VALUE)) ? cpu.longValueExact()
            : Long.MAX_VALUE;
}
 
Example 2
Source Project: gsc-core   File: VM.java    License: GNU Lesser General Public License v3.0 6 votes vote down vote up
private long calcMemCpu(CpuCost cpuCosts, long oldMemSize, BigInteger newMemSize,
                        long copySize, OpCode op) {
    long cpuCost = 0;

    checkMemorySize(op, newMemSize);

    // memory drop consume calc
    long memoryUsage = (newMemSize.longValueExact() + 31) / 32 * 32;
    if (memoryUsage > oldMemSize) {
        long memWords = (memoryUsage / 32);
        long memWordsOld = (oldMemSize / 32);
        //TODO #POC9 c_quadCoeffDiv = 512, this should be a constant, not magic number
        long memCpu = (cpuCosts.getMEMORY() * memWords + memWords * memWords / 512)
                - (cpuCosts.getMEMORY() * memWordsOld + memWordsOld * memWordsOld / 512);
        cpuCost += memCpu;
    }

    if (copySize > 0) {
        long copyCpu = cpuCosts.getCOPY_CPU() * ((copySize + 31) / 32);
        cpuCost += copyCpu;
    }
    return cpuCost;
}
 
Example 3
Source Project: incubator-tuweni   File: Gas.java    License: Apache License 2.0 5 votes vote down vote up
/**
 * Return a {@link Gas} containing the specified value.
 *
 * @param value The value to create a {@link Gas} for.
 * @return A {@link Gas} containing the specified value.
 * @throws IllegalArgumentException If the value is negative.
 */
public static Gas valueOf(BigInteger value) {
  checkArgument(value.signum() >= 0, "Argument must be positive");
  if (value.compareTo(BI_MAX_CONSTANT) <= 0) {
    return CONSTANTS[value.intValue()];
  }
  try {
    return new Gas(value.longValueExact());
  } catch (ArithmeticException e) {
    throw new IllegalArgumentException(e.getMessage(), e);
  }
}
 
Example 4
private static long bigIntegerDecimalToGenericIntegerType(BigInteger bigInteger, int sourceScale, long minValue, long maxValue)
{
    BigDecimal bigDecimal = new BigDecimal(bigInteger, sourceScale);
    BigInteger unscaledValue = bigDecimal.setScale(0, FLOOR).unscaledValue();
    if (unscaledValue.compareTo(BigInteger.valueOf(maxValue)) > 0) {
        return maxValue;
    }
    if (unscaledValue.compareTo(BigInteger.valueOf(minValue)) < 0) {
        return minValue;
    }
    return unscaledValue.longValueExact();
}
 
Example 5
Source Project: presto   File: TypeCalculation.java    License: Apache License 2.0 5 votes vote down vote up
public static Long calculateLiteralValue(
        String calculation,
        Map<String, Long> inputs)
{
    try {
        ParserRuleContext tree = parseTypeCalculation(calculation);
        CalculateTypeVisitor visitor = new CalculateTypeVisitor(inputs);
        BigInteger result = visitor.visit(tree);
        return result.longValueExact();
    }
    catch (StackOverflowError e) {
        throw new ParsingException("Type calculation is too large (stack overflow while parsing)");
    }
}
 
Example 6
Source Project: Xpatch   File: Asn1BerParser.java    License: Apache License 2.0 5 votes vote down vote up
private static long integerToLong(ByteBuffer encoded) throws Asn1DecodingException {
    BigInteger value = integerToBigInteger(encoded);
    try {
        return value.longValueExact();
    } catch (ArithmeticException e) {
        throw new Asn1DecodingException(
                String.format("INTEGER cannot be represented as long: %1$d (0x%1$x)", value),
                e);
    }
}
 
Example 7
Source Project: cava   File: Gas.java    License: Apache License 2.0 5 votes vote down vote up
/**
 * Return a {@link Gas} containing the specified value.
 *
 * @param value The value to create a {@link Gas} for.
 * @return A {@link Gas} containing the specified value.
 * @throws IllegalArgumentException If the value is negative.
 */
public static Gas valueOf(BigInteger value) {
  checkArgument(value.signum() >= 0, "Argument must be positive");
  if (value.compareTo(BI_MAX_CONSTANT) <= 0) {
    return CONSTANTS[value.intValue()];
  }
  try {
    return new Gas(value.longValueExact());
  } catch (ArithmeticException e) {
    throw new IllegalArgumentException(e.getMessage(), e);
  }
}
 
Example 8
Source Project: rainbow   File: TypeCalculation.java    License: Apache License 2.0 5 votes vote down vote up
public static Long calculateLiteralValue(
        String calculation,
        Map<String, Long> inputs)
{
    try {
        ParserRuleContext tree = parseTypeCalculation(calculation);
        CalculateTypeVisitor visitor = new CalculateTypeVisitor(inputs);
        BigInteger result = visitor.visit(tree);
        return result.longValueExact();
    }
    catch (StackOverflowError e) {
        throw new ParsingException("Type calculation is too large (stack overflow while parsing)");
    }
}
 
Example 9
Source Project: divolte-collector   File: MincodeParser.java    License: Apache License 2.0 5 votes vote down vote up
@SuppressWarnings("PMD.EmptyCatchBlock")
private void setNumberValue(final BigInteger value) {
    _numTypesValid = NR_BIGINT;
    _numberBigInt = value;
    // Jackson expects all smaller types to be filled in,
    // so do this until they don't fit.
    try {
        _numberLong = value.longValueExact();
        _numTypesValid |= NR_LONG;
        _numberInt = value.intValueExact();
        _numTypesValid |= NR_INT;
    } catch (final ArithmeticException e) {
        // Harmless; means we reached a type into which it won't fit.
    }
}
 
Example 10
private static long parseInteger(String text, boolean isSigned, boolean isLong)
        throws NumberFormatException {
    int pos = 0;

    boolean negative = false;
    if (text.startsWith("-", pos)) {
        if (!isSigned) {
            throw new NumberFormatException("Number must be positive: " + text);
        }
        ++pos;
        negative = true;
    }

    int radix = 10;
    if (text.startsWith("0x", pos)) {
        pos += 2;
        radix = 16;
    } else if (text.startsWith("0", pos)) {
        radix = 8;
    }

    String numberText = text.substring(pos);

    long result = 0;
    if (numberText.length() < 16) {
        // Can safely assume no overflow.
        result = Long.parseLong(numberText, radix);
        if (negative) {
            result = -result;
        }

        // Check bounds.
        // No need to check for 64-bit numbers since they'd have to be 16 chars
        // or longer to overflow.
        if (!isLong) {
            if (isSigned) {
                if ((result > Integer.MAX_VALUE) || (result < Integer.MIN_VALUE)) {
                    throw new NumberFormatException("Number out of range for 32-bit signed integer: "
                            + text);
                }
            } else {
                if ((result >= (1L << 32)) || (result < 0)) {
                    throw new NumberFormatException("Number out of range for 32-bit unsigned integer: "
                            + text);
                }
            }
        }
    } else {
        BigInteger bigValue = new BigInteger(numberText, radix);
        if (negative) {
            bigValue = bigValue.negate();
        }

        // Check bounds.
        if (!isLong) {
            if (isSigned) {
                if (bigValue.bitLength() > 31) {
                    throw new NumberFormatException("Number out of range for 32-bit signed integer: "
                            + text);
                }
            } else {
                if (bigValue.bitLength() > 32) {
                    throw new NumberFormatException("Number out of range for 32-bit unsigned integer: "
                            + text);
                }
            }
        } else {
            if (isSigned) {
                if (bigValue.bitLength() > 63) {
                    throw new NumberFormatException("Number out of range for 64-bit signed integer: "
                            + text);
                }
            } else {
                if (bigValue.bitLength() > 64) {
                    throw new NumberFormatException("Number out of range for 64-bit unsigned integer: "
                            + text);
                }
            }
        }

        result = bigValue.longValueExact();
    }

    return result;
}
 
Example 11
public static OutOfCpuException cpuOverflow(BigInteger actualCpu,
                                            BigInteger cpuLimit) {
    return new OutOfCpuException("Cpu value overflow: actualCpu[%d], cpuLimit[%d];",
            actualCpu.longValueExact(), cpuLimit.longValueExact());
}
 
Example 12
Source Project: lucene-solr   File: TestPointFields.java    License: Apache License 2.0 4 votes vote down vote up
@Test
public void testLongPointFieldRangeFacet() throws Exception {
  String docValuesField = "number_p_l_dv";
  String nonDocValuesField = "number_p_l";
  int numValues = 10 * RANDOM_MULTIPLIER;
  int numBuckets = numValues / 2;
  List<Long> values;
  List<Long> sortedValues;
  long max;
  do {
    values = getRandomLongs(numValues, false);
    sortedValues = values.stream().sorted().collect(Collectors.toList());
  } while ((max = sortedValues.get(sortedValues.size() - 1)) >= Long.MAX_VALUE - numValues); // leave room for rounding 
  long min = sortedValues.get(0);
  BigInteger bigIntGap =  BigInteger.valueOf(max + numValues).subtract(BigInteger.valueOf(min))
      .divide(BigInteger.valueOf(numBuckets));
  long gap = bigIntGap.longValueExact();
  int[] bucketCount = new int[numBuckets];
  int bucketNum = 0;
  long minBucketVal = min;
  // System.err.println("min:" + min + "   max: " + max + "   gap: " + gap);
  // System.err.println("bucketNum: " + bucketNum + "   minBucketVal: " + minBucketVal);
  for (Long value : sortedValues) {
    // System.err.println("value: " + value);
    while (BigInteger.valueOf(value).subtract(BigInteger.valueOf(minBucketVal)).compareTo(bigIntGap) > 0) {
      ++bucketNum;
      minBucketVal += gap;
      // System.err.println("bucketNum: " + bucketNum + "   minBucketVal: " + minBucketVal);
    }
    ++bucketCount[bucketNum];
  }

  for (int i = 0 ; i < numValues ; i++) {
    assertU(adoc("id", String.valueOf(i), docValuesField, String.valueOf(values.get(i)), nonDocValuesField, String.valueOf(values.get(i))));
  }
  assertU(commit());

  assertTrue(h.getCore().getLatestSchema().getField(docValuesField).hasDocValues());
  assertTrue(h.getCore().getLatestSchema().getField(docValuesField).getType() instanceof PointField);
  String[] testStrings = new String[numBuckets + 1];
  testStrings[numBuckets] = "//*[@numFound='" + numValues + "']";
  minBucketVal = min;
  for (int i = 0 ; i < numBuckets ; minBucketVal += gap, ++i) {
    testStrings[i] = "//lst[@name='facet_counts']/lst[@name='facet_ranges']/lst[@name='" + docValuesField
        + "']/lst[@name='counts']/int[@name='" + minBucketVal + "'][.='" + bucketCount[i] + "']";
  }
  assertQ(req("q", "*:*", "facet", "true", "facet.range", docValuesField, "facet.range.start", String.valueOf(min),
      "facet.range.end", String.valueOf(max), "facet.range.gap", String.valueOf(gap)),
      testStrings);
  assertQ(req("q", "*:*", "facet", "true", "facet.range", docValuesField, "facet.range.start", String.valueOf(min),
      "facet.range.end", String.valueOf(max), "facet.range.gap", String.valueOf(gap), "facet.range.method", "dv"),
      testStrings);

  assertFalse(h.getCore().getLatestSchema().getField(nonDocValuesField).hasDocValues());
  assertTrue(h.getCore().getLatestSchema().getField(nonDocValuesField).getType() instanceof PointField);
  minBucketVal = min;
  for (int i = 0 ; i < numBuckets ; minBucketVal += gap, ++i) {
    testStrings[i] = "//lst[@name='facet_counts']/lst[@name='facet_ranges']/lst[@name='" + nonDocValuesField
        + "']/lst[@name='counts']/int[@name='" + minBucketVal + "'][.='" + bucketCount[i] + "']";
  }
  // Range Faceting with method = filter should work
  assertQ(req("q", "*:*", "facet", "true", "facet.range", nonDocValuesField, "facet.range.start", String.valueOf(min),
      "facet.range.end", String.valueOf(max), "facet.range.gap", String.valueOf(gap), "facet.range.method", "filter"),
      testStrings);
  // this should actually use filter method instead of dv
  assertQ(req("q", "*:*", "facet", "true", "facet.range", nonDocValuesField, "facet.range.start", String.valueOf(min),
      "facet.range.end", String.valueOf(max), "facet.range.gap", String.valueOf(gap), "facet.range.method", "dv"),
      testStrings);
}
 
Example 13
Source Project: logging-log4j2   File: JsonReader.java    License: Apache License 2.0 4 votes vote down vote up
private Number readNumber() {

        // Read sign.
        buffer.setLength(0);
        if (readChar == '-') {
            bufferReadChar();
        }

        // Read fraction.
        boolean floatingPoint = false;
        bufferDigits();
        if (readChar == '.') {
            bufferReadChar();
            bufferDigits();
            floatingPoint = true;
        }

        // Read exponent.
        if (readChar == 'e' || readChar == 'E') {
            floatingPoint = true;
            bufferReadChar();
            if (readChar == '+' || readChar == '-') {
                bufferReadChar();
            }
            bufferDigits();
        }

        // Convert the read number.
        final String string = buffer.toString();
        if (floatingPoint) {
            return new BigDecimal(string);
        } else {
            final BigInteger bigInteger = new BigInteger(string);
            try {
                return bigInteger.intValueExact();
            } catch (ArithmeticException ignoredIntOverflow) {
                try {
                    return bigInteger.longValueExact();
                } catch (ArithmeticException ignoredLongOverflow) {
                    return bigInteger;
                }
            }
        }

    }
 
Example 14
Source Project: Java-Coding-Problems   File: Main.java    License: MIT License 3 votes vote down vote up
public static void main(String[] args) {

        BigInteger nr = BigInteger.valueOf(Long.MAX_VALUE);
               
        long nrLong = nr.longValue();        
        System.out.println(nr + " as long is: " + nrLong);
        
        int nrInt = nr.intValue();
        System.out.println(nr + " as int is: " + nrInt);
        
        short nrShort = nr.shortValue();
        System.out.println(nr + " as short is: " + nrShort);
        
        byte nrByte = nr.byteValue();                                
        System.out.println(nr + " as byte is: " + nrByte);
                
        long nrExactLong = nr.longValueExact(); // ok       
        System.out.println(nr + " as exact long is: " + nrExactLong);
        
        int nrExactInt = nr.intValueExact(); // ArithmeticException
        System.out.println(nr + " as exact int is: " + nrExactInt);
        
        short nrExactShort = nr.shortValueExact(); // ArithmeticException
        System.out.println(nr + " as exact short is: " + nrExactShort);
        
        byte nrExactByte = nr.byteValueExact(); // ArithmeticException                        
        System.out.println(nr + " as exact byte is: " + nrExactByte);
    }
 
Example 15
Source Project: ghidra   File: IntegerTextField.java    License: Apache License 2.0 3 votes vote down vote up
/**
 * Returns the current value as a long.
 *
 * <P> If the field has no current value, 0 will be returned. If
 * the value is bigger (or smaller) than an long, it will be cast to a long.
 *
 * <P> If using this method, it is highly recommended that you set the max value to {@link Long#MAX_VALUE}
 * or lower.
 *
 * @return the current value as a long. Or 0 if there is no value
 * @throws ArithmeticException if the value in this field will not fit into a long
 */
public long getLongValue() {
	BigInteger currentValue = getValue();
	if (currentValue == null) {
		return 0;
	}
	return currentValue.longValueExact();
}