gpt4 book ai didi

c++ - 在 C 和 C++ 中使用浮点转换与浮点后缀之间有什么区别吗?

转载 作者:行者123 更新时间:2023-12-03 10:04:16 25 4
gpt4 key购买 nike

这之间有区别吗(使用 floating point literal suffixes ):

float MY_FLOAT = 3.14159265358979323846264338328f; // f suffix
double MY_DOUBLE = 3.14159265358979323846264338328; // no suffix
long double MY_LONG_DOUBLE = 3.14159265358979323846264338328L; // L suffix
vs 这个(使用浮点转换):
float MY_FLOAT = (float)3.14159265358979323846264338328;
double MY_DOUBLE = (double)3.14159265358979323846264338328;
long double MY_LONG_DOUBLE = (long double)3.14159265358979323846264338328;
在 C 和 C++ 中?
注意:函数调用也是如此:
void my_func(long double value);

my_func(3.14159265358979323846264338328L);
// vs
my_func((long double)3.14159265358979323846264338328);
// etc.
有关的:
  • What's the C++ suffix for long double literals?
  • https://en.cppreference.com/w/cpp/language/floating_literal
  • 最佳答案

    默认为 double .假设 IEEE754 浮点数,doublefloat 的严格超集,因此您永远不会因为不指定 f 而失去精度. 编辑:这仅在指定可以由 float 表示的值时才适用。 .如果发生舍入,由于舍入两次,这可能不是严格正确的,请参阅 Eric Postpischil 的 answer .所以你也应该使用 f浮点数的后缀。

    这个例子也有问题:

    long double MY_LONG_DOUBLE = (long double)3.14159265358979323846264338328;
    这首先给出了 double常量然后转换为 long double .但是因为您从 double 开始你已经失去了永远不会回来的精确度。因此,如果您想在 long double 中使用全精度您必须使用的常量 L后缀:
    long double MY_LONG_DOUBLE = 3.14159265358979323846264338328L; // L suffix

    关于c++ - 在 C 和 C++ 中使用浮点转换与浮点后缀之间有什么区别吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65137336/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com