小编Mad*_*Tux的帖子

std::chrono::round 对超出范围的值的行为是否符合预期?

我目前正在将 a 舍入std::chrono::duration<float>std::chrono::duration<uint32_t>,当我给它超出范围的值时,它会舍入为 ,1s而不是4294967295s

看看标准,它说

template <class ToDuration, class Rep, class Period>   
constexpr ToDuration round(const duration<Rep, Period>& d);
Run Code Online (Sandbox Code Playgroud)

[...]
返回:其中可表示的值 tToDuration最接近d。[...]

这是我的确切代码:

#include <chrono>
#include <cstdio>
#include <limits>
#include <cstdint>

int main()
{
        std::chrono::duration<float> seconds{std::numeric_limits<float>::max()};
        printf("float:    %f\n", seconds.count());
        printf("uint32_t: %u\n", std::chrono::round<std::chrono::duration<uint32_t>>(seconds).count());
        printf(" int32_t: %d\n", std::chrono::round<std::chrono::duration<int32_t>>(seconds).count());
        printf("uint64_t: %lu\n", std::chrono::round<std::chrono::duration<uint64_t>>(seconds).count());
        printf(" int64_t: %ld\n", std::chrono::round<std::chrono::duration<int64_t>>(seconds).count());
}
Run Code Online (Sandbox Code Playgroud)

哪个输出

float:    340282346638528859811704183484516925440.000000
uint32_t: 1
 int32_t: -2147483647
uint64_t: 9223372036854775809
 int64_t: -9223372036854775807
Run Code Online (Sandbox Code Playgroud)

正如您所看到的,其他整数类型的行为也很奇怪。与等人不同的是std::lround, …

c++ rounding undefined-behavior c++-chrono c++17

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

将<enter>添加到.exrc快捷方式

我找到了这个很酷的exrc文件来制作F-Keys的东西,例如map #2 :set number,它只是放在那个ex命令中,并让我按回车确认.然而,我做了一个关闭(map #4 :q),如果它自动添加一个输入我想它,所以它只是关闭,我不必先按Enter键.然后我会点击它关闭.

如何添加输入字符?

vi vim

0
推荐指数
1
解决办法
51
查看次数

标签 统计

c++ ×1

c++-chrono ×1

c++17 ×1

rounding ×1

undefined-behavior ×1

vi ×1

vim ×1