C++ C++;生成器的StrToFloat()与.ToDouble()相同

C++ C++;生成器的StrToFloat()与.ToDouble()相同,c++,double,floating-point-precision,c++builder-xe6,C++,Double,Floating Point Precision,C++builder Xe6,我在一个XE6项目中工作,但这可能也适用于其他版本的builder 我在看一个函数名,我认为这可能会误导。我很好奇StrToFloat()是否返回一个float,或者它是否返回一个double。我找到了另一种选择,那就是.ToDouble(),但是我们的代码中已经有一堆引用使用了StrToFloat()。我想验证一下,我得到的精度是双倍的 我做了一些测试,比如: UnicodeString temp = "1234567890.12345678901234567890"; double a =

我在一个XE6项目中工作,但这可能也适用于其他版本的builder

我在看一个函数名,我认为这可能会误导。我很好奇
StrToFloat()
是否返回一个
float
,或者它是否返回一个
double
。我找到了另一种选择,那就是
.ToDouble()
,但是我们的代码中已经有一堆引用使用了
StrToFloat()
。我想验证一下,我得到的精度是双倍的

我做了一些测试,比如:

UnicodeString temp = "1234567890.12345678901234567890";
double a = StrToFloat(temp);
double b = temp.ToDouble();

这些似乎给出了与我所做测试相同的值,但我希望验证
StrToFloat()

StrToFloat()

.ToDouble()
返回一个
double

简单的回答是,它们不一样,并且如上所示有所不同

参考资料:

  • StrToFloat()
  • 扩展的
  • .ToDouble()
  • long-double
    double
    精度更高
    .ToDouble()
    在内部调用
    StrToFloat()。不过,一定要注意扩展的
    文档
    Extended
    在32位平台上是一个
    long double
    ,但在Win64上是一个
    double
    。区别在于
    double
    是8字节(64位),而
    longdouble
    是10字节(80位)。那是16位。@RemyLebeau:那太好了strange@MooingDuck:这是由于64位CPU的硬件限制。x86本机支持10字节浮点运算(首先是为什么存在扩展的
  • ),而x64则不支持。Embarcadero确实提供了
    TExtended80Rec
    类型来处理x64中的10字节浮点操作,但性能当然不会与CPU本机执行这些操作的性能相同。