你好,
只要我做测试3,第499个fibonacci项与104位数字转换为双精度-测试应该是char或字符串的输入?
如果我使用int2str(),它会失去一些准确性…
你好,鲍勃Tivnan。我同意Ahmos Sansom的观点,即当前的测试套件存在一个缺陷。这个问题在“解决方案1418487”中得到了证明。请解决这个问题,要么通过改变输入数据类型(不是我的首选项),要么通过使用精确兼容双精度或uint64数据类型(我的首选项). . . .的数字如果你关心硬编码的“解决方案”(例如:金宝搏官方网站“解决方案1418491”),然后您应该向您的测试套件中添加更多的测试,并且还可以实现每个指定输入向量中元素顺序的随机排列。
div
顺便说一下,如果您事先开发自己可靠的参考解决方案,这可能是可以避免的。
David Verrelli,我的参考测试套件没有你提到的问题。
如果你改变最后一个数字会发生什么——它仍然通过吗?
即:
X = [2 23 33 33 5 566 7 86168291600238450732788312165664788095941068326060883324529903470149056115823592713458328176574447204501];
来
X = [2 23 33 33 5 566 7 86168291600238450732788312165664788095941068326060883324529903470149056115823592713458328176574447204500];
嗨,Bob,在最后一个测试套件问题中,x向量中的最后一个元素不能用双精度恰当地表示(t将与在最后88位内任何不同的相似数字无法区分)。请切换到使用其他合适的表示(例如,java大整数)或修改测试套件,以保持那里的值更小一点(双精度可以合理地工作在~1e15以下的整数,int64可以上升到~1e20)
我继续修改了测试套件,以便最后一个数字可以安全地表示为双精度浮点数。
你知道为什么它在测试3中总是失败,而在我的PC上却运行得很好吗?
@RAHUL DEY:你确定你的解决方案在你的PC上给出了测试3的正确答案吗?当我在测试3和4上运行您的解决方案时,它们都给我相同的结果(对测试4是正确的,但对测试3不是)。
请注意Alfonso Nieto-Castanon在关于这个问题的评论中提到的:“双精度可以合理地处理~1e15以下的整数。”您正在使用的方法平方x中的值,这使得这个大数字(大约8.9e15)等于大约8e31,这超出了双精度值的允许精度,导致本应不同的值看起来相同。这就是为什么您的解决方案对测试3和4返回相同的结果。你必须找到一种不依赖于x值的平方(或增加)的不同方法。
你的解决方案是第一个有效的!但是,我更改了测试套件,您的代码没有通过新的测试。我加了一个非常非常大的斐波那契数。你能修改你的代码让它工作吗?