C 和 C++ 中 float 和 double 的大小是多少? [英] What is the size of float and double in C and C++?

查看:31
本文介绍了C 和 C++ 中 float 和 double 的大小是多少?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我想看看是否有任何类似于 uint32_t 的标准类型,它总是会映射到 32 位无符号整数类型,但我找不到.

I was looking to see if there is any standard type similar to uint32_t which always would map into a 32-bit unsigned integral type but I could not find any.

float 的大小在所有平台上总是 4 字节吗?
double 的大小总是 8 吗?

Is the size of float always 4 byte on all platform?
Is the size of double always 8?

这两个标准是否对此事有任何说明?

Does either standard say anything on the matter?

我想确保我的大小在所有平台(x86 和 x64)上始终相同,所以我使用标准的 int 类型,但是我找不到任何类似的 float 和 <代码>双.

I want to make sure that my size is always the same on all platforms (x86 and x64) so I am using standard int types, but I could not find any similar typedef for float and double.

推荐答案

摘自 C99 标准,规范性附录 F(C++ 标准没有明确提到这个附录,尽管它包括所有受影响的功能,每个参考都没有改变.另外,为了兼容性,类型必须匹配.):

Excerpt from the C99 standard, normative annex F (The C++-standard does not explicitly mention this annex, though it includes all affected functions without change per reference. Also, the types have to match for compatibility.):

1 本附件规定了对 IEC 60559 浮点标准的 C 语言支持.这IEC 60559 浮点标准专门用于二进制浮点运算微处理器系统,第二版(IEC 60559:1989),以前指定IEC 559:1989 和作为二进制浮点运算的 IEEE 标准(ANSI/IEEE 754-1985).独立于基数的浮点数的 IEEE 标准算术 (ANSI/IEEE 854−1987) 概括了二进制标准以删除依赖于基数和字长.IEC 60559 一般是指浮点数标准,如 IEC 60559 操作、IEC 60559 格式等.定义 __STDC_IEC_559__ 应符合本附件中的规范.356)如果指明了 C 语言和 IEC 60559 之间的绑定,则除非另有说明,否则 IEC 60559 指定的行为通过引用采用.自从负无穷大和正无穷大可以用 IEC 60559 格式表示,所有实数都在在可表示的值范围内.

IEC 60559 floating-point arithmetic

F.1 Introduction

1 This annex specifies C language support for the IEC 60559 floating-point standard. The IEC 60559 floating-point standard is specifically Binary floating-point arithmetic for microprocessor systems, second edition (IEC 60559:1989), previously designated IEC 559:1989 and as IEEE Standard for Binary Floating-Point Arithmetic (ANSI/IEEE 754−1985). IEEE Standard for Radix-Independent Floating-Point Arithmetic (ANSI/IEEE 854−1987) generalizes the binary standard to remove dependencies on radix and word length. IEC 60559 generally refers to the floating-point standard, as in IEC 60559 operation, IEC 60559 format, etc. An implementation that defines __STDC_IEC_559__ shall conform to the specifications in this annex.356) Where a binding between the C language and IEC 60559 is indicated, the IEC 60559-specified behavior is adopted by reference, unless stated otherwise. Since negative and positive infinity are representable in IEC 60559 formats, all real numbers lie within the range of representable values.

因此,包括 (或在 C++ 中可能是 ),并测试 __STDC_IEC_559__.

So, include <math.h> (or in C++ maybe <cmath>), and test for __STDC_IEC_559__.

如果定义了宏,不仅可以更好地指定类型(float 为 32 位,double 为 64 位等),而且内置运算符的行为和标准功能更详细.
缺少宏不提供任何保证.

If the macro is defined, not only are the types better specified (float being 32bits and double being 64bits among others), but also the behavior of builtin operators and standard-functions is more specified.
Lack of the macro does not give any guarantees.

对于 x86 和 x86_64 (amd64),您可以依赖类型 floatdouble 符合 IEC-60559,尽管使用它们的函数和对它们的操作可能不是.

For x86 and x86_64 (amd64), you can rely on the types float and double being IEC-60559-conformant, though functions using them and operations on them might not be.

这篇关于C 和 C++ 中 float 和 double 的大小是多少?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆