P-Adic numbers, basic: Difference between revisions

m
Improved coding.
m (Improved coding.)
m (Improved coding.)
Line 1,686:
 
=={{header|Java}}==
This example displays p-adic numbers in standard mathematical format, consisting of a possibly infinite list of digits extending leftwards from the p-adic point. Answersp-adic numbers are given correct to O(prime^40) and the rational reconstruction is correct to O(prime^20).
<syntaxhighlight lang="java">
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import java.util.stream.Collectors;
 
public final class PAdicNumbersBasic {
 
Line 1,814 ⟶ 1,819:
// Zero
if ( numbers.isEmpty() || allZeroDigits(numbers) ) {
return new Rational(0, 1);
}
Line 1,867 ⟶ 1,872:
* Return a string representation of this p-adic.
*/
public String toString() {
List<Integer> numbers = new ArrayList<Integer>(digits);
while ( digits.size() > PRECISION ) {
Collections.reverse(numbers);
digits.removeLast();
padWithZeros(digitsnumbers);
}
String numberString = numbers.stream().map(String::valueOf).collect(Collectors.joining());
padWithZeros(digits);
StringBuilder builder = new StringBuilder(numberString);
StringBuilder builder = new StringBuilder();
for ( int i = digits.size() - 1; i >= 0; i-- ) {
builder.append(digits.get(i));
}
if ( order >= 0 ) {
Line 1,889 ⟶ 1,890:
}
return " ..." + builder.toString().substring(builder.length() - PRECISION - 2);
}
Line 1,904 ⟶ 1,905:
prime = aPrime;
digits = new ArrayList<Integer>(aDigits);
padWithZeros(digits);
order = aOrder;
}
Line 1,925:
*/
private void negateList(List<Integer> aDigits) {
aDigits.set(0, Math.floorMod( prime - aDigits.get(0), prime) % prime);
for ( int i = 1; i < aDigits.size(); i++ ) {
aDigits.set(i, prime - 1 - aDigits.get(i));
Line 1,956:
*/
private static void padWithZeros(List<Integer> aList) {
while ( aList.size() < PRECISIONDIGITS_SIZE ) {
aList.addLast(0);
}
Line 2,024:
<pre>
3-adic numbers:
-5 / 9 => ...222222222222222222222222222222222222222222222222222222222222222222222222222222222.11
47 / 12 => ...02020202020202020202020202020202020210120202020202020202020202020202020202020202101.2
sum => ...202020202020202020202020202020202021010202020202020202020202020202020202020202101.01
Rational = 121 / 36
 
7-adic numbers:
5 / 8 => ...2424242424242424242424242424242424242425424242424242424242424242424242424242424242425.0
353 / 30809 => ...1560462505550343461155520004023663643455665231560462505550343461155520004023663643455.0
sum => ...4315035233123101033613062431266421216213422504315035233123101033613062431266421216213.0
Rational = 156869 / 246472
</pre>
908

edits