Seeking Volunteers for Serious Java Project

Way out of my league, but I’m just curious - this is a forum for a java game development engine, where hobbyists try to implement their game ideas. Would there not be a forum better suited for this type of java engine problem solving ? There must be forums for the openjdk, adoptopenjdk, corretto, oracles or similar that would have people more interested in this problem ? I hope you have already tried to look there for people to assist you :slight_smile:

2 Likes

Yeah, they have.

I think the communication problems we see in this thread are probably exclusionary in the proper forums.

It will probably end the same way here but we are a curious bunch and so asked questions.

3 Likes

This doesn’t require IEEE or floating point, this is a maths question not a programming question. The number 0.110 cannot (without infinite places) exactly be written as a binary number (base-2 number). By which I mean a number like 0.00011001100110011012. If you believe it can please tell me what it is.

The problems occur because the present IEEE 754 curve treats whole numbers and decimals differently

I’m going to try and guess at what you mean by this, please let me know if this is not your meaning. So my reading of this is that you mean float the point in decimal.

So 0.131 would be represented as 131 - thousandths. And obviously the numbers 13110 and 100010 can be exactly represented in binary (they are 100000112 and 11111010002). And this is part of a larger principal; any number that can be expressed as a fraction in one base can be expressed as a fraction in any other base.

Obviously a language that worked like this could get questions like “what is 0.710-0.110?” exactly correct. Would this system remain decimal obsessed or would one third also be supported? In any case, it would be slow, and slow-but-decimal-accurate maths is already supported by BigDecimal. Few applications exist that would benefit from slow-but-decimal-accurate maths (Money is one of the few where it would and BigDecimal is one solution to that use case).

1 Like

Firstly, the schemed that allows 0.1 to be written finitely and
accurate in binary is just a mirror scheme of any binary representation,
that does not allow for negative powers to map values between 1 and 0.
You can treat those numbers as being whole numbers, superficially, at view.

a language that worked like this could get questions like 
“what is 0.7-0.1 ?” exactly correct.

This is true. In base 10, it would treat decimals and integers the same way, for the production of all digits.
For the evaluation of something of 1/3, it would (and should) give you

double a = 1.0D/3.0D;

// 0.3333333......3

which will be as far as the allowed range would allow. It would also allow

double b = a*3.0;

System.out.println(b == 1.0D);

// true

Despites not being possible from operations on the stored digits, alone.

Such a system would work for base 10 and base 16 whole numbers, and base 10 and base 16 Rational numbers. By the way, a Rational number is named for a property that it has in fractions and decimals; that its representation always terminates.

All this is what my included white graph diagram to the top of this discussion represents; since there is no negative exponent X axis, for decimal values that are not just whole numbers as well as the whole numbers. Since partial ascription appears very similar to whole numbers, you just use an echo of exactly the same thing to produce digits with no particular regard to their placing; you partial numbers between all occurences of the whole numbers as though they were whole numbers.

Observationally, whis would mean for any one whole/partial number value with one dot separator, the speed for the whole numbers and the partial ones would have to be the same. If one suggested change is made, they are no longer treated differently as IEEE 754 requires; The partial ones echo how the whole ones are treated, and so speed must be uniform for them both, since only one means is involved.