这段代码当Shu为-50.0的时候,计算XiaoShuBuFen为错误的96,为什么?代码如下 void float2cmdfloat(struc_cmd_float_type* StrBuffer, float Shu, int XiaoShuWeiShu) { uint32_t eee; // ecx uint32_t i; // eax int32_t XiaoShuBuFen; // edx StrBuffer->WhoAmIZero = 0; StrBuffer->FuDianZhi = Shu; StrBuffer->ZhengShuBuFen = (int)Shu; if (XiaoShuWeiShu!=0) { if ((unsigned __int8)XiaoShuWeiShu <= 1u) { eee = 10; } else { eee = 10; i = 1; do { eee *= 10; ++i; } while (i != (unsigned __int8)XiaoShuWeiShu); } XiaoShuBuFen = ((int)(Shu * eee)) % eee; //(long double)eee StrBuffer->XiaoShuBuFen = XiaoShuBuFen; StrBuffer->XiaoShuWeiShu = (unsigned __int8)XiaoShuWeiShu; if (XiaoShuBuFen < 0) StrBuffer->XiaoShuBuFen = -XiaoShuBuFen; } else { StrBuffer->XiaoShuBuFen = 0; StrBuffer->XiaoShuWeiShu = 0; } }
时间: 2024-03-24 08:38:14 浏览: 66
这段代码中计算小数部分的语句是:
```
XiaoShuBuFen = ((int)(Shu * eee)) % eee;
```
其中,eee是10的XiaoShuWeiShu次方,即小数位数的位数权值。当Shu为-50.0时,计算得到的XiaoShuBuFen为-96,这是因为C语言中int类型的取模运算对负数的处理方式是不同于我们通常想象的,它会保留符号并将余数的绝对值小于除数的绝对值。因此,((int)(Shu * eee))得到的是-500,而-500 % 100 = -96。如果想要得到正确结果,可以将XiaoShuBuFen改为:
```
XiaoShuBuFen = abs((int)(Shu * eee)) % eee;
```
这样就可以得到正确的小数部分值96。
相关问题
如果我需要时间点1和时间点3连接,时间点2和时间点4连接,以此类推,那么应该怎么更改下面这段代码,才能构造出满足我需要的有向图,def get_tc_graph_struc(temporal_len): struc_map = {} teporal_list = list(range(0,temporal_len)) for tp in teporal_list: # 遍历所有特征 if tp not in struc_map: # 构建结构映射字典struc_map struc_map[tp] = [] for other_tp in teporal_list: # 遍历所有特征 if other_tp is not tp and other_tp < tp: # 将除当前节点以外的所有节点保存到struc_map中,struc_map字典保存所有节点与其他节点的连接关系 struc_map[tp].append(other_tp) return struc_map
您可以通过修改 `get_tc_graph_struc` 函数来构造您需要的有向图。具体而言,您可以按照如下方式修改代码:
```python
def get_tc_graph_struc(temporal_len):
struc_map = {}
temporal_list = list(range(0,temporal_len))
for tp in temporal_list:
if tp not in struc_map:
struc_map[tp] = []
if tp % 2 == 1 and tp > 0:
struc_map[tp].append(tp-1)
if tp % 2 == 0 and tp < temporal_len-1:
struc_map[tp].append(tp+1)
return struc_map
```
在上面的代码中,我们首先创建了一个空字典 `struc_map`,然后使用 `list` 函数创建了一个包含 0 到 `temporal_len-1` 的整数列表 `temporal_list`,表示时间序列上的所有时间点。
接下来,我们遍历所有时间点,对于每个时间点 `tp`,如果它还没有出现在 `struc_map` 中,就将其加入字典,并且初始化对应的值为一个空列表。然后,我们使用 if 语句来判断当前时间点 `tp` 的奇偶性,并且根据奇偶性来确定与其相邻的时间点,并将其加入 `tp` 对应的列表中,表示在时间序列上存在一条从 `tp` 到相邻时间点的有向边。具体而言,如果 `tp` 是奇数且大于 0,则将 `tp-1` 加入 `tp` 对应的列表中;如果 `tp` 是偶数且小于 `temporal_len-1`,则将 `tp+1` 加入 `tp` 对应的列表中。
最后,我们返回构建好的结构映射字典 `struc_map`。
总之,通过修改上述代码,您可以构造出满足您需要的有向图,其中时间点 1 和时间点 3 连接,时间点 2 和时间点 4 连接,以此类推。
解释下面这段代码:def get_tc_graph_struc(temporal_len): struc_map = {} teporal_list = list(range(0,temporal_len)) for tp in teporal_list: # 遍历所有特征 if tp not in struc_map: # 构建结构映射字典struc_map struc_map[tp] = [] for other_tp in teporal_list: # 遍历所有特征 if other_tp is not tp and other_tp < tp: # 将除当前节点以外的所有节点保存到struc_map中,struc_map字典保存所有节点与其他节点的连接关系 struc_map[tp].append(other_tp) return struc_map
这段代码是一个 Python 函数,名为 `get_tc_graph_struc`,它接受一个参数 `temporal_len`,表示时间维度的长度。该函数的作用是构建一个时间序列上的有向图的结构映射字典,用于表示每个时间点与其他时间点之间的连接关系。具体的实现过程如下:
1. 首先,该函数创建一个空字典 `struc_map`,用于保存时间序列上各个时间点之间的连接关系。
2. 接下来,用 `list` 函数创建一个包含 0 到 `temporal_len-1` 的整数列表 `temporal_list`,表示时间序列上的所有时间点。
3. 然后,函数遍历所有时间点,即 `temporal_list` 中的每个元素,对于每个时间点,它会执行以下操作:
a. 如果当前时间点 `tp` 还没有出现在 `struc_map` 中,就将其加入字典,对应的值是一个空列表。
b. 遍历所有时间点,对于除了当前时间点以外的其他时间点 `other_tp`,如果 `other_tp` 小于 `tp`,就将 `other_tp` 加入 `tp` 对应的列表中,表示在时间序列上存在一条从 `other_tp` 到 `tp` 的有向边。
4. 最后,函数返回构建好的结构映射字典 `struc_map`。
该函数的实现过程比较简单,它主要是通过遍历时间序列中的所有时间点,将时间点之间的连接关系保存到一个字典中,以便后续的有向图上的计算。
阅读全文