Java中出现意外的负数
import java.util.*; public class Prac9FibonacciNumbers { public static void main(String[] args) { int[] x = new int[100]; x[0] = 1; x[1] = 1; for (int a = 2; a < 100; a++) { x[a] = x[a - 1] + x[a - 2]; } for (int a = 0; a < 100; a++) { if(a < 99){ System.out.print(x[a] + ","); } else{ System.out.print(x[a]); } } } } 该程序旨在创建斐波纳契数列表.但是,出于某种原因,它在我的输出中间给出了负数. 我可以用 Math.abs() 但我想知道它为什么给我负数.输出低于.请帮助我理解这个问题.
解决方法
Fibonacci数字将大幅增长.在第46个数字处,您开始获得负数,例如-1323752223.这是因为数字已经变得如此之大以至于它溢出了int数据类型.
你可以使用long []数组,但这只会推迟问题.您将开始在第92个数字处获得负数,例如-6246583658587674878,因为它将溢出long数据类型. 使用double将不具有如此大的精度.您可以使用BigIntegers,它具有任意精度和大小. BigInteger[] x = new BigInteger[100]; x[0] = BigInteger.ONE; x[1] = BigInteger.ONE; 你需要使用add方法. x[a] = x[a - 1].add(x[a - 2]); (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |