C++ C++;生成器的StrToFloat()与.ToDouble()相同
我在一个XE6项目中工作,但这可能也适用于其他版本的builder 我在看一个函数名,我认为这可能会误导。我很好奇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 =
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本机执行这些操作的性能相同。