相关疑难解决方法(0)

C/C++中整数除法的快速上限

给定整数值,x并且yC和C++都返回作为q = x/y浮点等效的底数的商.我对一种返回天花板的方法很感兴趣.例如,ceil(10/5)=2ceil(11/5)=3.

显而易见的方法包括:

q = x / y;
if (q * y < x) ++q;
Run Code Online (Sandbox Code Playgroud)

这需要额外的比较和乘法; 我见过的其他方法(事实上使用)涉及铸造为floatdouble.是否有更直接的方法可以避免额外的乘法(或第二个除法)和分支,并且还可以避免作为浮点数进行转换?

c c++ algorithm math

241
推荐指数
8
解决办法
14万
查看次数

如何找到任何整数的10的下一个倍数?

动态整数将是0到150之间的任何数字.

即 - 数字返回41,需要返回50.如果数字是10则需要返回10.数字是1需要返回10.

如果我将整数修改为小数,我以为我可以使用天花板功能......?然后使用天花板功能,并回到十进制?
唯一的事情也是必须知道这个数字是1,2或3位数(即-7 vs 94 vs 136)

有没有更好的方法来实现这一目标?

谢谢,

c algorithm math

42
推荐指数
5
解决办法
4万
查看次数

整数除法在C++中用负数舍入

假设a并且b都是类型int,并且b非零.考虑a/b在以下情况下执行的结果:

  1. a并且b都是非负的.
  2. a并且b都是消极的.
  3. 其中只有一个是消极的.

在案例1中,结果向下舍入到最接近的整数.但标准对案例2和案例3有什么看法?我发现在互联网上浮动的旧草案表明它是依赖于实现的(是的,甚至是案例2),但委员会倾向于使其始终"向零舍入".有谁知道(最新)标准说的是什么?请仅根据标准回答,而不是有意义的回答,或者特定的编译器做什么.

c++ rounding

31
推荐指数
3
解决办法
2万
查看次数

从VBA上的给定日期获取该月的周数

我有一组日期,我必须获得本月的一周,有很多文献说明如何使用VBA代码获取一年中的一周,而不是如何获得当月的周数.例如03年3月13日将进行第3周的第1周,而不是第10周的结果.
所有帮助apreciated

excel vba date week-number

6
推荐指数
2
解决办法
1万
查看次数

有没有办法批量输出磁盘上的文件大小?

有没有办法在属性窗口中获取文件的磁盘大小:

我试过了:

(在批处理文件中)

echo %~z1
Run Code Online (Sandbox Code Playgroud)

,

for %i in (TestFile.txt) do echo %~zi
Run Code Online (Sandbox Code Playgroud)

,

dir
Run Code Online (Sandbox Code Playgroud)

但它们只返回文件的大小.

有没有办法像在属性窗口中看到的那样获得"磁盘大小"?

file batch-file filesize

6
推荐指数
1
解决办法
782
查看次数

为了避免使用E_INVALIDARG,如何填充常量着色器?

我正在研究当我尝试创建存储灯光信息的第二个常量缓冲区时引发的E_INVALIDARG异常:

    // create matrix stack early
    CD3D11_BUFFER_DESC constantMatrixBufferDesc(sizeof(ModelViewProjectionConstantBuffer), D3D11_BIND_CONSTANT_BUFFER);
    DX::ThrowIfFailed(
        m_d3dDevice->CreateBuffer(
        &constantMatrixBufferDesc,
        nullptr,
        &m_constantMatrixBuffer
        )
        );

    DX::ThrowIfFailed(
        m_matrixStack.Initialize(m_d3dContext, m_constantMatrixBuffer, &m_constantMatrixBufferData)
        );

    // also create the light buffer early, we must create it now but we will later
    // update it with the light information that we parsed from the model
    CD3D11_BUFFER_DESC constantLightBufferDesc(sizeof(LightConstantBuffer), D3D11_BIND_CONSTANT_BUFFER);

/* !!!!---- AN E_INVALIDARG IS THROWN BY THE FOLLOWING LINE ----!!!! */
    DX::ThrowIfFailed(
        m_d3dDevice->CreateBuffer(
        &constantLightBufferDesc,
        nullptr,
        &m_constantLightBuffer
        )
        );
Run Code Online (Sandbox Code Playgroud)

此时,传递给Light的CreateBuffer调用的参数似乎与Matrix的状态相同!问题似乎与缓冲区描述中存储的字节数有关.

缓冲区在模块中定义如下:

// a constant buffer that contains …
Run Code Online (Sandbox Code Playgroud)

c++ directx graphics hlsl windows-phone-8

5
推荐指数
1
解决办法
3943
查看次数

VBA:四舍五入到最接近的数字倍数

这个问题已经被问到 C++ 语言,但我需要一个 VBA 函数。我尝试将 C++ 函数转换为 VBA,但它没有返回正确的值。

我需要一个执行以下操作的函数:

RoundUp(23.90, 5)
'return 25

RoundUp(23.90, 10)
'return 30

RoundUp(23.90, 20)
'return 40

RoundUp(23.90, 50)
'return 50

RoundUp(102.50, 5)
'return 105

RoundUp(102.50, 20)
'return 120
Run Code Online (Sandbox Code Playgroud)

这是我到目前为止所拥有的。它在大多数情况下都有效,但对于比倍数小 0.5 的数字返回不正确的值。所以这个问题似乎是我如何计算余数的一个舍入问题。

Public Function RoundUp(dblNumToRound As Double, lMultiple As Long) As Double
    Dim rmndr As Long
    rmndr = dblNumToRound Mod lMultiple
    If rmndr = 0 Then
        RoundUp = dblNumToRound
    Else
        RoundUp = Round(dblNumToRound) + lMultiple - rmndr
    End If
End Function
Run Code Online (Sandbox Code Playgroud)

例如:

RoundUp(49.50, 50) …
Run Code Online (Sandbox Code Playgroud)

ms-access vba

2
推荐指数
1
解决办法
7525
查看次数