为什么我需要使用3.14f而不是3.14来禁用所有这些警告? 这有一个连贯的理由吗?
答案 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
)