gpt4 book ai didi

c - 如果变体具有 INF 或 NAN 值,如何使变体的 ChangeType float ?

转载 作者:可可西里 更新时间:2023-11-01 11:39:10 25 4
gpt4 key购买 nike

我在变体中有浮点值,最初这个变体是一个 bstr 类型。我正在使用 VariantChangeType 更改为浮点类型。然后我从中获取浮点值,然后我将其转换为字节 vector 格式。

如果变体具有浮点值,则可以正常工作。如果变体具有 INF 值,则 VariantChangeType 会失败。所以我从 variant.fltVal 中得到 0。

如果变体具有 INF 或 NAN 值,如何将类型更改为 float ?我想以浮点形式获取 INF 或 NAN 值。

Convert(_variant_t varVal,vector<byte> dataArr)
{
HRESULT hr = VariantChangeType( varVal&, &varVal, 0 , VT_R4 );

// Above code is failing if varVal.bstr contains 1.#INF" values

UINT size = 4;
if ( data && dataItem.vt != VT_EMPTY )
{
float value = dataItem.fltVal;
BYTE tmpBuf[4];
memcpy(tmpBuf, &value, sizeof(value));
for( int i = size - 1 ; i >= 0 ; i-- )
{
data->push_back(tmpBuf[i]);
}
retVal = TRUE;
}
}

最佳答案

伪语言:

 if ( varVal.bstr.contains("1.#INF" ) ) {
// assign plus infinity to your variant see http://stackoverflow.com/questions/2538339/infinity-in-msvc
} else if ( varVal.bstr.contains("-1.#INF" ) ) {
// assign minus infinity to your variant see http://stackoverflow.com/questions/2538339/infinity-in-msvc
} else if ( varVal.bstr.contains("NaN" ) {
// assign NaN to your variant see http://stackoverflow.com/questions/235386/using-nan-in-c
} else {
// your original working code for regular float values
}

请注意,因为它是一个脆弱的解决方案:它依赖于无穷大和 NaN 的字符串表示形式,也许 Microsoft 可以在没有警告的情况下更改它们。

这是Raymond Chen的非官方但权威的信息: What does -1.#IND mean?: A survey of how the Visual C runtime library prints special floating point values ,即使它与 VARIANT 无关。

Output  Meaning1#INF   Positive infinity-1#INF  Negative infinity1#SNAN  Positive signaling NaN-1#SNAN Negative signaling NaN1#QNAN  Positive quiet NaN-1#QNAN Negative quiet NaN1#IND   Positive indefinite NaN-1#IND  Negative indefinite NaN

官方信息是printf Type Field Characters .

关于c - 如果变体具有 INF 或 NAN 值,如何使变体的 ChangeType float ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4406462/

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