Printing 为什么我的组合函数没有';删除小数点时,是否无法正确打印大数字?(卢阿语)

Printing 为什么我的组合函数没有';删除小数点时,是否无法正确打印大数字?(卢阿语),printing,lua,combinations,largenumber,Printing,Lua,Combinations,Largenumber,要在lua中正确打印大数字(没有像e+这样的东西),我需要做什么?另外,如何在不使用math.floor()的情况下删除小数点,如123456.0 我做了一个组合函数,a,b小于100。 首先,我使用阶乘函数进行了修改,但出现了溢出。所以,我是通过派系分解来实现的。范围在100以下,所以我抓取了100以下的素数并成功了 localn,m=io.read(“*n”,“*n”) 局部素数={2,3,5,7,11,13,17,19,23,29,31, 37, 41, 43, 47, 53, 59, 6

要在lua中正确打印大数字(没有像e+这样的东西),我需要做什么?另外,如何在不使用math.floor()的情况下删除小数点,如123456.0

我做了一个组合函数,a,b小于100。 首先,我使用阶乘函数进行了修改,但出现了溢出。所以,我是通过派系分解来实现的。范围在100以下,所以我抓取了100以下的素数并成功了

localn,m=io.read(“*n”,“*n”)
局部素数={2,3,5,7,11,13,17,19,23,29,31,
37, 41, 43, 47, 53, 59, 61, 67, 71, 73, 79, 83, 89, 97}
函数make_case()
局部素数_情形={}
对于ipairs(prime)do中的i,v
素数情形[i]={v,0}
结束
返回素数
结束
函数事实(n,m,ans)
本地案例=ans
对于i=m,n do
如果i~=0,那么
本地num=i
对于ipairs(案例)中的j,v do
重复
如果num%v[1]==0,则
num=num/v[1]
案例[j][2]=案例[j][2]+1
其他的
打破
结束
直到num%v[1]~=0
如果num==1,则
打破
结束
结束
结束
结束
回程箱
结束
如果n-m>m,则
m=n-m
结束
本地顶级案例=制作案例()
本地bot_case=make_case()
本地top=事实(n,m+1,top\u情况)
本地bot=事实(n-m,0,bot\u案例)
本地tot=1
对于ipairs(顶部)中的i、v
--打印(v[1]、v[2]、bot[i][2])
top[i][2]=top[i][2]-bot[i][2]
tot=tot*(top[i][1]^top[i][2])
结束
打印(数学地板(tot))
我尝试使用64 40作为输入值,结果是2.5064910546967e+17(当我只打印tot时)。我不想看到这个结果中的小数点,所以我在结果上加了math.floor。结果为250649105469666112,但最后2位数字错误。该输入的正确答案是250649105469666100


其他小的输入工作得很好,所以我认为这个问题来自于打印。如何打印一位接一位的大数字?

问题是求幂运算,它总是返回一个双精度。该输入的正确答案似乎是250649105469666120,它不能精确地表示为双精度。要打印不带小数点且不带exp的浮点:
print(“%.f”):format(x))
,但如果您的数字大于
2^53
,则可能已经失去精度。问题是求幂,它总是返回一个双精度。该输入的正确答案似乎是250649105469666120,它不能精确地表示为双精度。要打印不带小数点且不带exp的浮点:
print(“%.f”):format(x))
,但如果您的数字大于
2^53
,则可能已经失去精度。