使用双变量类型而不是浮点数是一个坏习惯 [已关闭]

Is Using double variable type instead of float a bad habit [closed]

提问人:Kasun Wathsara Hapangama 提问时间:11/4/2023 最后编辑:chqrlieKasun Wathsara Hapangama 更新时间:11/4/2023 访问量:86

问:


想改进这个问题吗?更新问题,以便可以通过编辑这篇文章用事实和引文来回答。

13天前关闭。

我必须为我的大学考试编写 C 代码,并且我有声明变量而不是变量的练习。这是一个坏习惯吗?他们可以为此扣分吗?(我们从不超过限制)doublefloatfloat

我认为使用比因为是字面意思更好,如果我们声明我们正在将 a 转换为 .doublefloat0.71doublefloat one = 1.1;doublefloat

C 双重 约定

评论

3赞 phuclv 11/4/2023
通常不建议使用 float,除非您受到内存或 CPU 带宽的限制
2赞 Retired Ninja 11/4/2023
“他们能为此扣分吗?”我们怎么知道?如果您担心,请询问您的教授或任何将为您的作品评分的人。
3赞 Jonathan Leffler 11/4/2023
在我看来,使用 instead 更像是一种不好的做法。精度非常有限。(我也学过 C,当时所有浮点运算都是使用值完成的——前标准 C。但我不经常使用 - 除非我需要大量数组并且降低精度是可以接受的。floatdoublefloatdoublefloat
0赞 dimich 11/4/2023
这取决于程序目的和目标体系结构。
0赞 0___________ 11/4/2023
不好的做法是不加考虑地使用类型。

答:

3赞 SmellyCat 11/4/2023 #1

在这个网站上的许多讨论中,参与者更喜欢 double 而不是 float,如果他们在提出的问题中看到 double,建议用 double 替换 float

一般来说,当您需要浮点值/变量时,只需使用类型 double。默认情况下,表达式中使用的文字浮点值将被视为双精度值,

人们希望 Windows 桌面和服务器上的浮点计算在两种浮点类型之间是相同的

在某些架构上,没有用于双打的专用硬件,...为您提供更差的吞吐量和两倍的延迟。在其他类型(例如 x86 FPU)上,两种类型都转换为相同的内部格式 80 位浮点,在 x86 的情况下),因此性能是相同的。

某些智能手机和嵌入式架构可能会从使用而不是 .floatdouble

使用 IEEE 754 时,为 32 位(24 位尾数,8 位指数)和 64 位(53 位尾数,11 位指数)。指数大小决定了每种类型的最大值(和最小值)。尾数大小决定了每种类型的最高精度。floatdouble

除非您有用于“窄”浮点计算的宏,否则大多数数学函数(包含 math.h 的类型)将返回 而不是 。像这样的 C++ 声明将声明一个称为 .三角函数、舍入函数和幂函数作为参数并返回。doublefloatconst auto cosine = cos(theta)doublecosinedoubledouble

OpenGL 是一个例外,通常是首选,因为 API 处理浮点数。对于需要精度的图形计算,您可以自行计算并转换为 。floatdoublefloat

我应该使用 double 还是 float? float 和 double 有什么区别?

http://www.open-std.org/jtc1/sc22/wg14/www/docs/n1256.pdf

1赞 chqrlie 11/4/2023 #2

您的问题需要基于意见的答案......让我们试着坚持事实:

我必须为我的大学考试编写 C 代码,并且我有声明变量而不是变量的练习。这是一个坏习惯吗?doublefloat

一点也不。在现代系统的大多数情况下,计算速度并不明显慢于计算,并且提供更好的精度和更宽的领域。在特殊情况下,例如与视频游戏或神经网络的专用硬件接口,可能是更好甚至唯一的选择,但对于一般问题,似乎更可取。doublefloatfloatdouble

我认为使用比因为是字面意思更好,如果我们声明我们正在转换为 .doublefloat0.71doublefloat one = 1.1;doublefloat

你对此是绝对正确的。尽管转换应在编译时执行,但应编写声明以避免转换。另请注意,计算结果可能为 false。float one = 1.1F;one == 1.1

他们可以为此扣分吗?

这取决于当地的惯例和纠正者的习惯或意见。你应该问他们期望什么,并口头捍卫你的观点。对于学生来说,违背老师的先入之见通常是一个坏主意,即使这些先入之见是无效的,尤其是在公共场合这样做。