小编Ric*_*ard的帖子

如何将float转换为double(都存储在IEEE-754表示中)而不会丢失精度?

我的意思是,例如,我有以下编号用IEEE-754单精度编码:

"0100 0001 1011 1110 1100 1100 1100 1100"  (approximately 23.85 in decimal)
Run Code Online (Sandbox Code Playgroud)

上面的二进制数存储在文字字符串中.

问题是,如何将此字符串转换为IEEE-754双精度表示(有点像下面的那个,但值不一样),没有丢失精度?

"0100 0000 0011 0111 1101 1001 1001 1001 1001 1001 1001 1001 1001 1001 1001 1010"
Run Code Online (Sandbox Code Playgroud)

是的 相同的数字 以IEEE-754双精度编码.

我尝试使用以下算法首先将第一个字符串转换回十进制数,但它失去了精度.

num in decimal = (sign) * (1 + frac * 2^(-23)) * 2^(exp - 127)
Run Code Online (Sandbox Code Playgroud)

我在Windows平台上使用Qt C++ Framework.

编辑:我必须道歉,也许我没有明确表达的问题.我的意思是我不知道真正的值23.85,我只得到第一个字符串,我想将其转换为双精度表示而不会出现精度损失.

c++ floating-point double qt ieee-754

7
推荐指数
1
解决办法
2259
查看次数

如何使用Qt确定我的Internet IP是否属于给定的IP列表

我有以下存储在TXT文件中的IP列表(CIDR格式):<

58.200.0.0/13
202.115.0.0/16
121.48.0.0/15
219.224.128.0/18
...
Run Code Online (Sandbox Code Playgroud)

但我不知道如何确定我的IP是否属于此列表.我在Windows平台上使用Qt C++框架.

c++ ip qt cidr

5
推荐指数
3
解决办法
5848
查看次数

"dynamic_cast"之后的NULL指针实际上是否可以取消引用?

以下代码正确编译并获得神秘的输出:

特殊投资功能00000000

(环境:C++ VS2010)

#include <iostream>
#include <vector>
using namespace std;

class Security {
public:
  virtual ~Security() {}
};

class Stock : public Security {};

class Investment : public Security {
public:
  void special() {
    cout << "special Investment function" << endl;
  }
};

int main() {
  Security* p = new Stock;
  dynamic_cast<Investment*>(p)->special();
  cout << dynamic_cast<Investment*>(p) << endl;
  return 0;
}
Run Code Online (Sandbox Code Playgroud)

怎么会这样?取消引用NULL指针并获得"正确"输出而不是崩溃?它是VS2010的特殊"特征"吗?

现在我明白了.我做了一个测试,似乎在"特殊"功能中解除引用"this"会导致程序崩溃.

谢谢你的帮助.

c++ visual-studio-2010 visual-c++

4
推荐指数
1
解决办法
959
查看次数

将 Vec&lt;&amp;T&gt; 转换为 &amp;[T] 而不分配

问题陈述

我正在尝试调用fn some_api_function()&[T]作为参数。为了生成该函数的参数,我尝试调用flat_mapVecs 的 Vec(它本身埋藏在 RefCell 内)。但我无法将 Vec<&T> 转换为 &[T]。出于性能原因,我最好避免Copy使用整个数据集,因为只需要只读借用。Clonesome_api

代码来说明:

use std::cell::RefCell;
pub struct EnvVar {}

pub struct Arena {
    services: RefCell<Vec<Service>>,
}

pub struct Service {
    env_vars: Vec<EnvVar>,
}

pub fn some_api(env_vars: &[EnvVar]) {}

fn main() {
    let arena = Arena {
        services: RefCell::new(vec![Service {
            env_vars: vec![EnvVar {}],
        }]),
    };
    let env_vars: Vec<&EnvVar> = arena
        .services
        .borrow()
        .iter()
        .flat_map(|compose_service| compose_service.env_vars.as_ref())
        .collect();

    some_api(&env_vars);
}

Run Code Online (Sandbox Code Playgroud)

游乐场

错误:

   Compiling …
Run Code Online (Sandbox Code Playgroud)

rust

1
推荐指数
1
解决办法
257
查看次数

标签 统计

c++ ×3

qt ×2

cidr ×1

double ×1

floating-point ×1

ieee-754 ×1

ip ×1

rust ×1

visual-c++ ×1

visual-studio-2010 ×1