对于精确的整数除法,CEIL太高了

Syn*_*ech 3 c++ formula ceil off-by-one

今天早上我丢失了一堆文件,但因为它们的内容和外部碎片整理,所以100%恢复所需的所有信息都可用; 我只需要在必要时填写FAT.

我编写了一个程序来执行此操作并在我转储到文件的FAT副本上对其进行测试,除了对于一些文件(526中的17个)之外,它的工作方式完美,FAT链是一个单独的集群太长,从而与下一个文件交叉链接.

幸运的是,我确切地知道问题是什么.我ceil在EOF计算中使用过,因为即使单个字节结束也需要一个额外的集群:

//Cluster    is the starting cluster of the file
//Size       is the size (in bytes) of the file
//BPC        is the number of bytes per cluster
//NumClust   is the number of clusters in the file
//EOF        is the last cluster of the file’s FAT chain

DWORD NumClust = ceil( (float)(Size / BPC) )
DWORD EOF      = Cluster + NumClust;
Run Code Online (Sandbox Code Playgroud)

此算法适用于除大小恰好是簇大小的倍数的文件之外的所有内容,在这种情况下,它们最终成为一个群集太多.

我考虑了一段时间但是对于这样做的方法感到茫然.看起来它应该很简单,但不知何故,这是非常棘手的.

什么公式适用于任何大小的文件?

Hot*_*cks 7

如果您想要(size + BPC - 1) / BPC所有集成数据类型的簇数.