首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >不损失精度的类型转换

不损失精度的类型转换
EN

Stack Overflow用户
提问于 2016-08-21 05:49:31
回答 2查看 100关注 0票数 0

我最近刚刚注意到框架中的一些代码,将某些变量转换为双精度,然后在框架访问它们时转换回来。在C++11标准中,这能保证在不损失任何整数类型的精度的情况下工作吗?如果是,是哪一个?在常见的实现中,有没有其他类型对这种类型的转换是普遍安全的?

另外,有没有办法在编译时以这种方式检查转换是安全的?从本质上讲,我喜欢这样的东西:

代码语言:javascript
复制
static_assert(T(double(T type))==type);
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2016-08-21 07:09:34

当整型T的值域是double型精确整数值值域的子域时,T(double(T_value))==T_value是有保证的。

由于没有double的实现具有16位或更少的尾数,而且据我所知没有任何现有的C++实现具有超过16位的每字节(来自<limits.h>CHAR_BIT常量),因此这一保证适用于char和显式signedunsigned变体。

通常,double有一些50+位的尾数,这足以保证32位整型类型也成立,但不是64位。

票数 2
EN

Stack Overflow用户

发布于 2016-08-21 08:34:46

好吧,我(基本上)弄明白了我问题的第二部分:

代码语言:javascript
复制
#include <limits>
static_assert(T(double(std::numeric_limits<T>::max()))==std::numeric_limits::max(),"ERROR MESSAGE.");
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/39058979

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档