我正在研究一個個人項目,其中一部分涉及計算一定範圍內的廣場和立方體(本例中爲10,000)。所以,我寫了一個簡單的C程序,我認爲它會驗證我的結果。這裏是小程序,我放在一起,看到所有的立方體:爲什麼我在這個簡單的C程序中得到這個奇怪的輸出?
#include <stdlib.h>
#include <stdio.h>
#include <math.h>
int main() {
double i;
int cubes = 0;
for (i = 1; i < 10000; i++) {
if (i == cbrt(i) * cbrt(i) * cbrt(i)) {
printf("%f --- %f\n",i, cbrt(i));
cubes++;
}
}
printf("%i\n", cubes);
return 0;
}
我得到了(不正確)輸出:24.如果你想看看這個去看了看問題的數字15和20上輸出。爲什麼我得到錯誤的答案(正確的答案是21)是完全不同的問題。我的問題出現了,當我瞎搞我的代碼,試圖解決這個問題,我暫時把它改成這樣:
int main() {
double i;
int cubes = 0;
for (i = 1; i < 10000; i++) {
double temp = (cbrt(i) * cbrt(i) * cbrt(i));
if (i == temp) {
printf("%f -> %f\n", i, temp);
cubes++;
}
}
printf("%i\n", cubes);
return 0;
}
現在,程序打印1至9999之間的每個號碼所以,我失去的東西可笑容易或發生了什麼?我所做的只是在cbrt(i)*cbrt(i)*cbrt(i)
而不是有條件我設置一個雙變量等於結果並將其放置在條件。爲什麼我的程序會這樣做?
我不知道爲什麼這個投票。我覺得這是一個合理的問題。對不起S.O.社區...
你究竟在做什麼?您是否在嘗試使用整數立方體根來查找數字? –
第一印象 - 您正在檢查浮點數(「雙」)的平等,這只是在尋找問題。爲什麼不用簡單的'int'來代替?或'uint64_t',或其他。 – Kamiccolo
假設我是一個int並且temp是一個double,由於double的內部四捨五入,你不會經常達到平等。 – Duck