相关疑难解决方法(0)

工会和打字

我一直在寻找,但找不到明确的答案.

很多人说使用工会来打字 - 双关语是不明确的和不好的做法.为什么是这样?考虑到你写入原始信息的内存并不仅仅是自己的改变,我看不出为什么它会做任何未定义的任何原因(除非它超出了堆栈的范围,但这不是一个联合问题,这将是糟糕的设计).

人们引用严格的别名规则,但在我看来,就像说你不能这样做,因为你做不到.

如果不打双关语,联盟的意义又是什么呢?我在某个地方看到它们应该被用来在不同的时间使用相同的内存位置来获取不同的信息,但为什么不在再次使用之前删除信息呢?

总结一下:

  1. 为什么使用工会进行打字是不好的?
  2. 如果不是这样,他们的意义何在?

额外信息:我主要使用的是C++,但想了解它和C.特别是我正在使用工会在浮点数和原始十六进制之间进行转换以通过CAN总线发送.

c c++ unions type-punning

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

如何:x86中的pow(真实,真实)

我正在寻找pow(real, real)x86汇编中的实现.另外,我想了解算法的工作原理.

x86 assembly pow

31
推荐指数
2
解决办法
2万
查看次数

自制的pow()c ++

我正在阅读如何自己编写电源功能?dan04给出的答案引起了我的注意,主要是因为我不确定fortran给出的答案,但我接受了并实现了这个:

#include <iostream>
using namespace std;
float pow(float base, float ex){
    // power of 0
    if (ex == 0){
        return 1;
    // negative exponenet
    }else if( ex < 0){
        return 1 / pow(base, -ex);
    // even exponenet
    }else if ((int)ex % 2 == 0){
        float half_pow = pow(base, ex/2);
        return half_pow * half_pow;
    //integer exponenet
    }else{
        return base * pow(base, ex - 1);
    }
}
int main(){
    for (int ii = 0; ii< 10; ii++){\
        cout << "pow(" …
Run Code Online (Sandbox Code Playgroud)

c++ math

8
推荐指数
2
解决办法
2万
查看次数

标签 统计

c++ ×2

assembly ×1

c ×1

math ×1

pow ×1

type-punning ×1

unions ×1

x86 ×1