C++ 我认为我的编译器版本是正确的?(在if语句中检测到1和0) #包括 #包括 布尔包含(标准::向量列表,int值){ 对于(unsigned int i=0;i将=与浮点值结合使用几乎所有情况下都是错误的。@t.niese在这种情况下,表示应该是相同的。O

C++ 我认为我的编译器版本是正确的?(在if语句中检测到1和0) #包括 #包括 布尔包含(标准::向量列表,int值){ 对于(unsigned int i=0;i将=与浮点值结合使用几乎所有情况下都是错误的。@t.niese在这种情况下,表示应该是相同的。O,c++,g++,mingw,mingw32,C++,G++,Mingw,Mingw32,我认为我的编译器版本是正确的?(在if语句中检测到1和0) #包括 #包括 布尔包含(标准::向量列表,int值){ 对于(unsigned int i=0;i将=与浮点值结合使用几乎所有情况下都是错误的。@t.niese在这种情况下,表示应该是相同的。OP执行完全相同的操作两次((double)4/3)您是否有快速数学标志?@Yksisarvinen:4./code>是编译时值,(double)i/j是运行时值。您必须至少知道一个版本,它不会产生预期的结果? #include <iost

我认为我的编译器版本是正确的?(在if语句中检测到1和0)
#包括
#包括
布尔包含(标准::向量列表,int值){

对于(unsigned int i=0;i将
=
与浮点值结合使用几乎所有情况下都是错误的。@t.niese在这种情况下,表示应该是相同的。OP执行完全相同的操作两次(
(double)4/3
)您是否有
快速数学
标志?@Yksisarvinen:
4./code>是编译时值,
(double)i/j
是运行时值。您必须至少知道一个版本,它不会产生预期的结果?
#include <iostream>
#include <vector>

bool contains(std::vector<int> list, int value){
    for(unsigned int i=0; i<list.size(); i++){
        if(list[i] == value) return 1;
    }
    return 0;
}

bool containsdouble(std::vector<double> list, double value){
    for(unsigned int i=0; i<list.size(); i++){
        if(list[i] == value) return 1;
    }
    return 0;
}

int main(){
    std::vector<int> step = {0};
    std::vector<double> value = {};
    value.push_back(double(4)/double(3));
    int i = 4;
    int j = 3;
    while(1){
        if(contains(step, (0)) && !containsdouble(value, double(i)/double(j))){
            std::cout << contains(step, (0)) << " && " << !containsdouble(value, double(i)/double(j)) << " caught on\ni = " << i << ", j = " << j;
            return 0;
        }
        i*=2; j*=2;
    }
    return 0;
}