百科问答小站 logo
百科问答小站 font logo



为什么这个程序电脑运行的结果和手机运行的不一样?数值小的时候一样? 第1页

  

user avatar   yang-leonier 网友的相关建议: 
      

long不一定比int长,在x86 32位或者64位Windows下long和int的长度是一样的,都是32位。

而在大部分ARM 64位系统下,比如iOS、Android下,long和long long等价,都是64位的,而int则是32位的。

因此你第三个函数里面,使用long这个数据类型,结果是不跨平台的。为什么你会这么写?你可能参考了谭浩强C教材上的写法,他的很多东西还是16位DOS系统时代的,DOS下的C编译器一般int是16位,long是32位。

为什么手机上正确执行,因为你的手机大概率是基于64位ARM Linux的Android系统,这个系统上long长度是64位的,你的那个乘方函数里面稍微多乘几次也不会发生溢出。你在Windows上得不到正确的结果,是因为Windows上long长度只有32位,乘方函数计算中途很快就溢出了。

如果你第三个函数用long long替代long,应该在两个平台上都能得到正确结果。

       #include <stdio.h> double kesegi(int a, int b); long long prime(int a, int b);  int main() {  printf("%f", kesegi(3,20)); }  double kesegi(int a, int b) {  double num;  num = a * (1LL - prime(a,b)) / (1 - a);  return num; } long long prime(int a, int b) {  int n;  long long num=1;  for (n = 1; n <= b; ++n)  {   num = a * num;  }  return num; }     

如果你能使用C99,建议用<stdint.h>里面的int64_t来代替long,int32_t来代替int,这些变量的长度在所有系统下都是确定的,这样跨平台性好得多。




  

相关话题

  小米集团 10 月 25 日公布的手机出货量将于 2018 年 10 月底突破 1 亿台,说明了什么? 
  地球「碳知」计划| 如果少开手机能够减少地球「碳」的消耗,你能坚持关闭手机多长时间? 
  如何看待华为公布P30系列上市85天发货量破千万,比去年P20系列提前62天达成? 
  如何看待 Realme 官宣真我 GT Neo3 首销开售 10 秒销售额突破 1.2 亿? 
  如何看待红米 9A 成为 2021 全球手机销量前五? 
  malloc申请的内存能是虚拟内存吗,也就是申请的一块新的空间,刚申请就缺页吗? 
  如何制作一个插入电脑立刻让电脑自动关机的u盘? 
  高通骁龙845和 A10相比哪那个实力强? 
  如何看待华为每季度向高通支付1.5亿美元? 
  为什么小米高管说华为 P30 是在 P30 Pro 基础上「阉割了一堆功能还卖得挺贵」?是否有依据? 

前一个讨论
如何评价山东大学软件园某实验室由于工位上放水杯,抱枕等原因被全省通报,并连坐扣除整层楼学生补助?
下一个讨论
如何评价日本留学作弊泛滥现象?





© 2025-04-24 - tinynew.org. All Rights Reserved.
© 2025-04-24 - tinynew.org. 保留所有权利