Sdctf 2021
Alternative Arithmetic (Final Flag)
Solved By : nigamelastic and choco
-
I will use the following to run this java compiler to run my code online.
-
on connecting we see the first question which is:
4th question :
Enter 3 `String` values `s1`, `s2`, and `s3` such that:
new BigDecimal(s1).add(new BigDecimal(s2)).compareTo(new BigDecimal(s3)) == 0
but
Double.parseDouble(s1) + Double.parseDouble(s2) != Double.parseDouble(s3)
Do not enter quotation marks.
- answer 4 worked but very stupidly: i will paste my inputs and outputs and you just see :
First attempt
Do not enter quotation marks.
s1 = 0.004
s2 = -0.003
s3 = 0.001
Sorry, your answer is not correct. Try something else next time.
Second attempt
s1 = 20000000000000000000000000000000000000000000000.0000000000000000000000000000000000000000004
s2 = -10000000000000000000000000000000000000000000000.0000000000000000000000000000000000000000003
s3 = 10000000000000000000000000000000000000000000000.0000000000000000000000000000000000000000001
Sorry, your answer is not correct. Try something else next time.
Third attempt
s1 = 0.04
s2 = -0.03
s3 = 0.01
Perfect! You are correct.
-
credits to choco, who guided me, and after our discussion we realised for some reason
0.04
is working but0.004
isn’t choco also pointed out this amazing link https://docs.oracle.com/cd/E19957-01/806-3568/ncg_goldberg.html -
finally we discussed and realized the following :
-
according to double : ```bash 0.003 will be represented as 3.00000000000000006245004513517E-3 0.004 will be represented as 4.00000000000000008326672684689E-3 0.02 will be represented as 2.00000000000000004163336342344E-2
but
0.03 will be represented 2.99999999999999988897769753748E-2
* after this stupidity we finally get the 5th and final option:
- Final question! [🎶BOSS MUSIC🎶]
Fill in
```java
var i = (<type>) <num1>; var j = (<type>) <num2>;
such that after running the code above, the following expression:
i < j || i == j || i > j
evaluates to `false`.
<num1> and <num2> are Java code that satisfies this regex: [0-9]*\.?[0-9]*
- which is very easy , I remember it from my college days
- its
Integer 128
- this is due to the integer cache limits
- the following link would be a better explanation
- https://www.programmersought.com/article/91462031238/