2012-04-03 10 views
1

Ich versuche, einen RSA-Angriff in Java zu implementieren, und ich muss mathematische Operationen wie Stock und Ceil zu BigInteger-Variablen berechnen. Da wir wissen, dass math.ceil und math.floor nur für Doppelvariablen gelten, kennen Sie eine andere Methode, mit der ich Floor und Ceil für BigIntegers berechnen kann? Vielen Dank.Java: BigInteger Stock und Ceil Funktionen

+1

So wie 'öffentliche statische BigInteger Stock (BigInteger x) {return x; } ', und dasselbe für" ceil "? – maerics

+0

Ähm ... gib einfach den "Big ** Integer **" zurück? – Mysticial

Antwort

2

Die Frage macht keinen Sinn: floor und ceil runden eine Floating-Zahl zu einer Integer-Zahl ab. Und raten Sie mal: BigInteger kann nur ganze Zahlen darstellen. Also keine Rundung erforderlich. (Besonders der RSA-Kontext betont das ganzzahlige Zeichen).

2

Da BigInteger Werte ganze Zahlen sind, nehme ich an, dass Sie die Decke und den Boden der Division Operationen wollen. Dafür schlage ich vor, dass Sie stattdessen BigDecimal verwenden. Es hat eine Methode divide, die ein anderes BigDecimal und ein MathContext nimmt. Im MathContext können Sie unter anderem den Rundungsmodus als Decke oder Boden festlegen.

Wenn Sie nur eine Rundung in Richtung Null benötigen, können Sie auch BigDecimal.divideToIntegralValue verwenden.

+0

Der Rundungsmodus hat jedoch keine Auswirkungen auf das Ergebnis. Verwenden Sie stattdessen 'BigDecimal.divide (andere, RoundingMode.FLOOR)'. – Adam

+0

@codesparkle - Ja, Sie können einen Rundungsmodus direkt angeben, anstatt über einen 'MathContext'. Ich verstehe jedoch nicht, dass der Rundungsmodus im 'MathContext' keinen Effekt hat. Aus [docs for divide (BigDecimal, MathContext)] (http://docs.oracle.com/javase/6/docs/api/java/math/BigDecimal.html#divide%28java.math.BigDecimal,%) 20java.math.MathContext% 29): _ "Gibt ein' BigDecimal' zurück, dessen Wert (this/divisor) ist, mit Abrundung entsprechend den Kontexteinstellungen. "_ –

+0

Ihre Antwort bezieht sich jedoch auf die Methode' divideToIntegralValue', die ignoriert den Rundungsmodus vollständig und schneidet das Ergebnis immer ab. – Adam