gpt4 book ai didi

无法在具有相同功能的 c 和 excel 中得到相同的答案

转载 作者:行者123 更新时间:2023-11-30 20:18:03 25 4
gpt4 key购买 nike

我用c计算下面的函数,但无法得到正确答案(在excel中使用函数“INT”是正确答案,而在c中,我用“floor”来代替。)。

功能:

enter image description here

我的代码在c:

int ans;
ans = 1721013.5+367*Y-floor((7/4)*(Y+floor((M+9)/12)))+
D+h/24+floor(275*M/9);

当 Y=2018,M=3,D=9,h=9 时,我得到错误答案 2459700

正确答案:2458187

最佳答案

将所有常量 int 替换为 double 就足够了:

#include <stdio.h>
#include <math.h>

int main()
{
int Y=2018,M=3,D=9,h=9; /* can be double of course */
int ans = ceil(1721013.5+367.0*Y-floor((7.0/4.0)*(Y+floor((M+9.0)/12.0)))+
D+h/24.0+floor(275.0*M/9.0));

printf("%d\n", ans);
}

我需要使用ceil来打印2458187,否则我会得到2458186

编译和执行:

pi@raspberrypi:/tmp $ gcc -pedantic -Wall -Wextra f.c -lm
pi@raspberrypi:/tmp $ ./a.out
2458187
<小时/>

补充说明,出于最初的问题,因为表达式可以减少一个常量(没有任何变量),所以计算可以在编译时而不是在执行时完成:

pi@raspberrypi:/tmp $ gcc -O3 f.c
pi@raspberrypi:/tmp $ cat f.s
.arch armv6
...
main:
@ args = 0, pretend = 0, frame = 0
@ frame_needed = 0, uses_anonymous_args = 0
push {r4, lr}
ldr r1, .L3
ldr r0, .L3+4
bl printf
mov r0, #0
pop {r4, pc}
.L4:
.align 2
.L3:
.word 2458187
...

这里的值是在编译时计算的:.word 2458187

关于无法在具有相同功能的 c 和 excel 中得到相同的答案,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55383679/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com