我写了下面的代码来处理舍入错误。如果我用大于7的值调用loopUp,我会得到一个内存分配错误,我不知道如何修复。我已经在Windows 7上尝试了32/64位Erlang。任何帮助都将非常感谢。
-module(roundOff).
-export([main/0]).
main() ->
loopUp(10).
loopUp(1) -> 1;
loopUp(I) ->
io:fwrite("~f ", [math:pow(10.0, I)]),
sumUp(seq_float(1.0, math:pow(10, I), 1.0)),
loopUp(I-1).
sumUp(L) ->
sumUp(L, 0).
sumUp([], Acc) ->
io:fwrite("~.20f~n", [Acc]),
Acc;
sumUp([H|T], Acc) ->
sumUp(T, Acc+1.0/H).
seq_float(Min, Max, Inc, Counter, Acc) when (Counter*Inc + Min) >= Max ->
lists:reverse([Max|Acc]);
seq_float(Min, Max, Inc, Counter, Acc) ->
seq_float(Min, Max, Inc, Counter+1, [Inc * Counter + Min|Acc]).
seq_float(Min, Max, Inc) ->
seq_float(Min, Max, Inc, 0, []).
1条答案
按热度按时间rks48beu1#
您在seq_float中生成的列表太长了。与其提前生成所有数字,不如尝试根据需要计算每个数字。