为什么gcc在分配表达式时从表达式中减去1?

穆罕默德·阿卜杜拉夫(Mohamed Abdelraouf)

在使用code :: blocks IDE和C ++解决问题时,类似的表达式result[i] += ((res*1.0 /10)-(res/10)) * 10;,如果赋值为result[i]7后正确表达式的结果为8,则result[i]保留7而不是8。

这是整个函数:它需要两个数字并将每个数字转换为数组。例如34变为{4,3},所以我将数字添加为数组,而不是常规数字。

void add(char a, char b) { //get # digits of both int n1=0; int n2=0; char temp1=a; char temp2=b; //counting # digits of first number while( (temp1*1.0/10) != 0 ) { n1++; temp1/=10; } //counting # digits of second number while( (temp2*1.0/10) != 0 ) { n2++; temp2/=10; } int maxi=max(n1,n2); int mini=min(n1,n2); //filling arr1 arr2 char * arr1=new char[n1]; char * arr2=new char[n2]; char * result=new char[maxi+1]; //fill result with zeros for(int k=0; k<maxi+1; k++) result[k]=0; temp1=a; for(int i=0; i<n1; i++) { arr1[i]=((temp1*1.0 /10)-(temp1/10)) * 10; temp1/=10; } temp2=b; for(int j=0; j<n2; j++) { arr2[j]=((temp2*1.0 /10)-(temp2/10)) * 10; temp2/=10; } //add both arrays char res=0; char overflow=0; for(int i=0; i<maxi; i++) { if(i<mini) { res=arr1[i]+arr2[i]; if(checkDigit(res)) { result[i]=res; } else { //////////////////////////// //>>>>>>>> result[i] += ((res*1.0 /10)-(res/10)) * 10; /////////////////////////// overflow=res/10; result[i+1]=overflow; } } else { if(n1<n2) { result[i]+=arr2[i]; } else if(n2<n1) { result[i]+=arr1[i]; } } } if(!checkDigit(result[maxi-1])) { // assign overflow before result[maxi]=result[maxi-1]/10; result[maxi-1]=((result[maxi-1]*1.0 /10)-(result[maxi-1]/10)) * 10; } for(int i=0; i<maxi+1; i++) cout<<(int)result[i]<<endl; }

爱德华·斯特兰奇

您正在执行浮点运算。计算机上的浮点操作不是特别准确。无论如何,base10都不适用。可能发生的是您的结果类似于7.9999999999991。标准库中的各种文本流会将其打印为8,但事实并非如此。然后,当您分配给result[i]char(整数类型)时,您会得到标准的“在。之后将所有内容都切掉”。编译器的响应。

对此的简单响应是四舍五入操作。将.5添加到结果中,然后转换为整数。尽管根据您要解决的问题,但是有多种解决方案。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

为什么说“表达式不可分配”?

来自分类Dev

为什么正则表达式总是返回1?

来自分类Dev

语言设计:关于为什么分配的变量在算术表达式中返回错误答案的困惑

来自分类Dev

为什么这个表达式相等?

来自分类Dev

为什么复合表达式?

来自分类Dev

为什么这个表达式相等?

来自分类Dev

为什么此表达式在javaScript中返回2?

来自分类Dev

为什么将文字视为C ++中的表达式?

来自分类Dev

为什么Lambda表达式在此Include()中无效?

来自分类Dev

为什么在Rust中不是表达式

来自分类Dev

为什么表达式忽略F#中的条件?

来自分类Dev

在Java中,为什么我们需要在布尔表达式中减去一些数字?

来自分类Dev

&&在JavaScript表达式中返回什么

来自分类Dev

在编程中,什么是表达式?

来自分类Dev

什么是C中的子表达式?

来自分类Dev

&&在JavaScript表达式中返回什么

来自分类Dev

使用静态字段中的表达式时,为什么会收到InvalidCastException?

来自分类Dev

为什么在python中更改表达式时可变项不起作用?

来自分类Dev

在SSRS表达式中返回布尔值时,为什么需要IIF?

来自分类Dev

当函数声明和函数表达式同名时为什么调用函数表达式?

来自分类Dev

在表达式中减去NASM宏的意外结果

来自分类Dev

sed为什么输出-e表达式#1,字符55:前面的正则表达式无效

来自分类Dev

分配内存的表达式是右值表达式还是左值表达式?

来自分类Dev

正则表达式-为什么此正则表达式不能在Python中工作?

来自分类Dev

lambda表达式是在while()中调用的,为什么需要在lambda表达式后面加()

来自分类Dev

为什么在将正则表达式字符串分配给变量时出错?

来自分类Dev

正则表达式Java,为什么此正则表达式这么慢?

来自分类Dev

为什么我的代码与这些s表达式不匹配正则表达式?

来自分类Dev

为什么给出错误表达式不能包含lambda表达式?

Related 相关文章

  1. 1

    为什么说“表达式不可分配”?

  2. 2

    为什么正则表达式总是返回1?

  3. 3

    语言设计:关于为什么分配的变量在算术表达式中返回错误答案的困惑

  4. 4

    为什么这个表达式相等?

  5. 5

    为什么复合表达式?

  6. 6

    为什么这个表达式相等?

  7. 7

    为什么此表达式在javaScript中返回2?

  8. 8

    为什么将文字视为C ++中的表达式?

  9. 9

    为什么Lambda表达式在此Include()中无效?

  10. 10

    为什么在Rust中不是表达式

  11. 11

    为什么表达式忽略F#中的条件?

  12. 12

    在Java中,为什么我们需要在布尔表达式中减去一些数字?

  13. 13

    &&在JavaScript表达式中返回什么

  14. 14

    在编程中,什么是表达式?

  15. 15

    什么是C中的子表达式?

  16. 16

    &&在JavaScript表达式中返回什么

  17. 17

    使用静态字段中的表达式时,为什么会收到InvalidCastException?

  18. 18

    为什么在python中更改表达式时可变项不起作用?

  19. 19

    在SSRS表达式中返回布尔值时,为什么需要IIF?

  20. 20

    当函数声明和函数表达式同名时为什么调用函数表达式?

  21. 21

    在表达式中减去NASM宏的意外结果

  22. 22

    sed为什么输出-e表达式#1,字符55:前面的正则表达式无效

  23. 23

    分配内存的表达式是右值表达式还是左值表达式?

  24. 24

    正则表达式-为什么此正则表达式不能在Python中工作?

  25. 25

    lambda表达式是在while()中调用的,为什么需要在lambda表达式后面加()

  26. 26

    为什么在将正则表达式字符串分配给变量时出错?

  27. 27

    正则表达式Java,为什么此正则表达式这么慢?

  28. 28

    为什么我的代码与这些s表达式不匹配正则表达式?

  29. 29

    为什么给出错误表达式不能包含lambda表达式?

热门标签

归档