为什么在MSVC中默认将浮点值(如3.14)视为双精度?

时间:2010-12-04 13:42:32

标签: c++ visual-c++ floating-point double

为什么我需要使用3.14f而不是3.14来禁用所有这些警告? 这有一个连贯的理由吗?

5 个答案:

答案 0 :(得分:18)

这就是C ++(和C)标准所决定的。浮点文字的类型为double,如果需要它们为浮点数,则使用f作为后缀。似乎没有任何明确说明原因的原因,但我猜它是a)与C兼容,b)在精度和存储之间进行权衡。

  

2.13.3浮动文字类型   除非是,否则一个字面意思是双倍的   由后缀明确指定。该       后缀f和F指定float,后缀l和L指定long double。   如果缩放值不在   范围       该类型的类型可表示,该程序格式不正确。

答案 1 :(得分:5)

C和C ++更喜欢以两种方式浮动。正如您所注意到的,除非明确地生成浮点数,否则小数文字是双精度的。此外,浮点数不能在varargs中传递,它们总是被提升为double(同样,char和short在varargs中被提升为int)。

最好将float视为约定的double,而不是double是扩展的float。也就是说,double是首选的浮点类型,只要某个特定情况需要较小版本的float,就会使用double。这是我所知道的一个连贯的理由,然后规则才有意义,即使你碰巧遇到需要较小版本的情况。

答案 2 :(得分:1)

这不是MSVC所特有的,它是语言标准所要求的。

我建议除非明确请求,否则会降低精度,因此默认值为double。

单精度浮点提供的精度的6位有效数字很少用于一般用途,当然在现代桌面处理器上将被用作手写编码优化,其中作者已经确定它是足够和必要的;所以有必要使用明确的可见标记来指定单精度文字。

答案 3 :(得分:0)

这可能是C世界的标准。 Double是首选,因为它更精确,您可能不会看到任何性能差异。阅读this post

答案 4 :(得分:0)

因为double可以比float好大约3.14,可能吗?以下是确切的值:

3.140000000000000124344978758017532527446746826171875(double

3.1400001049041748046875(float