gpt4 book ai didi

c++ - 整数和 float 之间的加法......结果为零

转载 作者:太空宇宙 更新时间:2023-11-04 06:06:05 26 4
gpt4 key购买 nike

我一直在C++中对接口(interface)“clock_gettime(CLOCK_MONOTONIC, &CurrentTime)”提供的Linux定时器结构进行操作

#include <iostream>
#include <time.h>

int main()
{
struct timespec CurrentTime;
CurrentTime.tv_sec = 28220;
CurrentTime.tv_nsec = 461189000;

unsigned long long TimeNow;
TimeNow = (28220 * 1000000) + (461189000 * 0.001);

std::cout << TimeNow;
}

但结果总是将 TimeNow 显示为零。

如果有人对此问题有答案或有线索可循,我将不胜感激。这是使用 GCC 编译器完成的

可以在此处找到代码片段 http://rextester.com/XRR83683

最佳答案

行中:

TimeNow = (28220 * 1000000) + (461189000 * 0.001);

(28220 * 1000000) 部分是使用 int 计算的,并且(使用 32 位 int)溢出,给出不正确的值(可能是 -1844771072)。

由于 0.001 double 常量,(461189000 * 0.001) 部分使用 double 进行计算,将 461189.0 作为 double 给出。

然后将两者相加,得到一个负 double 值...当该负 double 转换为 unsigned long long 以分配给 TimeNow 时,它会被转换为 0,可能是因为这是其范围内最接近任何负数的值。这与将负整数类型转换为无符号不同,后者会“环绕”。

关于c++ - 整数和 float 之间的加法......结果为零,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39949511/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com