Could someone explain this?

Revision en1, by HHY_zZhu, 2024-03-30 14:11:16

You will see something strange in this code

which is : a > b && a == b && !(a > b && a == b) (a, b are double)


#include <bits/stdc++.h> using namespace std; typedef long long ll; typedef unsigned long long ull; double qpow(double a, ll b) { double res = 1; assert(b >= 0); for (; b; b >>= 1) { if (b & 1) res = res * a; a = a * a; } return res; } double n, m; double p; double check(int x) { double p1 = 1 - p; p1 = 1 - qpow(p1, x); p1 = 1 / p1 * (n * x + m); return p1; } void solve() { n = 10, m = 27, p = 2855; // scanf("%lf%lf%lf", &n, &m, &p); p /= 10000; int l = 1, r = 10; while (l < r) { int k = (r - l) / 3; int mid1 = l + k; int mid2 = l + k * 2; double a = check(mid1), b = check(mid2); if(mid1 == mid2) { cout << (a > b) << endl; cout << (a == b) << endl; cout << (a > b && a == b) << endl; cout << (a < b) << endl; cout << *((ull*)(&a)) << endl; cout << *((ull*)(&b)) << endl; cout << a << endl; cout << b << endl; } if (a > b) { if(mid1 == mid2) cout << (a == b) << endl; l = mid1 + 1; } else { r = mid2; } } } int main() { solve(); }

Put this code in custom test with C++17

Could someone explain this?

History

 
 
 
 
Revisions
 
 
  Rev. Lang. By When Δ Comment
en1 English HHY_zZhu 2024-03-30 14:11:16 1642 Initial revision (published)