please do not use floating point value in Factorio
please do not use floating point value in Factorio
hello developper team.
thanks for publishing beautiful great interesting game to the world, and daily fix.
you gave funny days for me
am... i'm in trouble on Factorio 1.1.19. it causes Factorio using floating point value to fluid items, i guess.
attachment file(blueprint.txt) is my 'advanced-oil-processing' oil-refineries.
it works by trains like below:
input train is arriving FULL
input train departing condition is EMPTY
output train arriving EMPTY
output train departing condition is FULL
when
odd oil-refineries crafts 63048 times,
even oil-refineries crafts 63028 times,
then
(1)all fluid-wagon to output a heavy-oil has look like 25k units of a heavy-oil, but train departing condition 'FULL' does not match so this train do not departing. I guess from (2), odd fluid-wagon has actually 24999.9 units.
(2)odd oil-refineries has 99.9 crude-oil
(3)fluid network(pipes, pumps) for input to (2) oil-refineries are empty.
i expect FULL means each fluid-wagon has 25000 fluid units.
and 'advanced-oil-processing' use a crude-oil just 100 units each time.
so it's strange that oil-refineries has 99.9 crude-oil.
oh where are you from 99.9 crude-oils? where are you gone 0.1 crude-oils?
i feel it is not intuitively.
in genellary, i think floating point value makes trouble in any software sometimes, so in the future, how about do not use floating point value in Factorio?
if you want to give a detail or accuracy by floating value, then use a some scaling value which scaled by '10^N, 10 to the power of N' instead floating point value for all fluid recipes, fluid-wagons, storage-tanks, and barrels.
i think fluid unit value scaling flushes away like an avobe trouble and we can play as usual and happy:)
thank you.
thanks for publishing beautiful great interesting game to the world, and daily fix.
you gave funny days for me
am... i'm in trouble on Factorio 1.1.19. it causes Factorio using floating point value to fluid items, i guess.
attachment file(blueprint.txt) is my 'advanced-oil-processing' oil-refineries.
it works by trains like below:
input train is arriving FULL
input train departing condition is EMPTY
output train arriving EMPTY
output train departing condition is FULL
when
odd oil-refineries crafts 63048 times,
even oil-refineries crafts 63028 times,
then
(1)all fluid-wagon to output a heavy-oil has look like 25k units of a heavy-oil, but train departing condition 'FULL' does not match so this train do not departing. I guess from (2), odd fluid-wagon has actually 24999.9 units.
(2)odd oil-refineries has 99.9 crude-oil
(3)fluid network(pipes, pumps) for input to (2) oil-refineries are empty.
i expect FULL means each fluid-wagon has 25000 fluid units.
and 'advanced-oil-processing' use a crude-oil just 100 units each time.
so it's strange that oil-refineries has 99.9 crude-oil.
oh where are you from 99.9 crude-oils? where are you gone 0.1 crude-oils?
i feel it is not intuitively.
in genellary, i think floating point value makes trouble in any software sometimes, so in the future, how about do not use floating point value in Factorio?
if you want to give a detail or accuracy by floating value, then use a some scaling value which scaled by '10^N, 10 to the power of N' instead floating point value for all fluid recipes, fluid-wagons, storage-tanks, and barrels.
i think fluid unit value scaling flushes away like an avobe trouble and we can play as usual and happy:)
thank you.
- Attachments
-
- blueprint.txt
- (39.24 KiB) Downloaded 152 times
Re: please do not use floating point value in Factorio
Thanks for the report however that's already how fluid wagons work. If you use "full" they will have 100% capacity. Additionally we aren't going to be changing how fluids or any other logic works to remove floating point values.
If you want to get ahold of me I'm almost always on Discord.
Re: please do not use floating point value in Factorio
thanks for quick reply.
now i have only one question about (2).
why oil-refinery has a fluid which amount are 99.9 units, when i send a fluids from "full" wagon to oil-refinery until wagon is empty.
at this time, fluid network that between wagon and oil-refinery are also empty.
i heard on local community, a little fluid which less than 0.1 units are stretched inside fluid network, then such a little fluid are disappear, like a water in "Terraria".
is it correct?
now i have only one question about (2).
why oil-refinery has a fluid which amount are 99.9 units, when i send a fluids from "full" wagon to oil-refinery until wagon is empty.
at this time, fluid network that between wagon and oil-refinery are also empty.
i heard on local community, a little fluid which less than 0.1 units are stretched inside fluid network, then such a little fluid are disappear, like a water in "Terraria".
is it correct?
Re: please do not use floating point value in Factorio
That’s more or less correct. Small amounts of liquid can basically evaporate and be lost. Often it’s more a case that pipes are separated and deleted with small amounts left in them, but I think it can happen on it’s own on rare occasions.
You might try a departure condition for your trains of item quantity heavy oil > 24k AND Idle 5 seconds OR Cargo Full.
You might try a departure condition for your trains of item quantity heavy oil > 24k AND Idle 5 seconds OR Cargo Full.
Re: please do not use floating point value in Factorio
thanks for quick reaction.
oh it's right.
it's not your guide but i try how to lost a fluid at Map Editor.
simple case below: (fluid-lost-try.txt)
(a) full tank -> pump -> oil-refinery
no fluid lost.
(b) full tank -> pump -> pipes -> oil-refinery
0.1 fluid lost.
(c) full tank -> pump -> pipes -> pump -> oil-refinery
0.1 fluid lost.
(d) full tank -> 8 pumps -> oil-refinery
no fluid lost.
now i understand a situation when a little fluid lost.
that is, pipes can lost a little fluid.
by the way, this lost is expected or bug?
oh it's right.
it's not your guide but i try how to lost a fluid at Map Editor.
simple case below: (fluid-lost-try.txt)
(a) full tank -> pump -> oil-refinery
no fluid lost.
(b) full tank -> pump -> pipes -> oil-refinery
0.1 fluid lost.
(c) full tank -> pump -> pipes -> pump -> oil-refinery
0.1 fluid lost.
(d) full tank -> 8 pumps -> oil-refinery
no fluid lost.
now i understand a situation when a little fluid lost.
that is, pipes can lost a little fluid.
by the way, this lost is expected or bug?
- Attachments
-
- fluid-lost-try.txt
- (2.26 KiB) Downloaded 130 times
Re: please do not use floating point value in Factorio
supplement:
fluids not remains in pipes at final state in avobe cases (a) to (d).
fluids not remains in pipes at final state in avobe cases (a) to (d).
Re: please do not use floating point value in Factorio
You don't actually lose 0.1, it's much much less than that, but the display rounds to the floor of the tenth's place. It would take a very long time for the error to accumulate to where you lose more than one production cycle. It's a bug in that it is never intended for fluids to be lost, but it's known and won't be fixed.
Re: please do not use floating point value in Factorio
Fluid may be lost or created in a really tiny amounts because of floating point math. Worst enemy is when a fluid system becomes empty: if all fluidboxes in a fluidsystem have less than 0.05 of fluid, then the whole fluid system is automatically flushed.
-- edit (27 march 2021): 97338
-- edit (27 march 2021): 97338
Re: please do not use floating point value in Factorio
Is that an explicit deletion of fluid in pipes like that? As in not just an issue of floating point math?
If that is case am I wrong about how the fluid values are rounded? Or are fluids on the building recipe display rounded by the floor and other fluid piping and tanks rounded to nearest?
Re: please do not use floating point value in Factorio
We don't round fluids anywhere for recipes or flow logic. The only 2 sources of fluids getting removed is floating point inaccuracy (incredibly tiny amounts) or when the systems fluids are explicitly flushed as boskid mentions.Zanthra wrote: ↑Tue Feb 16, 2021 9:30 pmIs that an explicit deletion of fluid in pipes like that? As in not just an issue of floating point math?
If that is case am I wrong about how the fluid values are rounded? Or are fluids on the building recipe display rounded by the floor and other fluid piping and tanks rounded to nearest?
If you want to get ahold of me I'm almost always on Discord.
Re: please do not use floating point value in Factorio
Ah yeah, I meant for display. Rounding or truncating has to happen there at some point. I was just thinking at the moment why 0.05, and thought maybe to avoid numbers in pipes being rounded to 0.0 for display while actually having fluid in them to avoid confusion, but that would still happen if the fluid was above 0.05 and the display value was truncated, or the fluid was kept alive by another connected fluid box with more than 0.05.
Re: please do not use floating point value in Factorio
As far as I know the reason why pipes flush when below 0.05 fluid is to prevent an incredibly tiny amount just sitting there clogging up the pipe(s).
Since all fluids in the game are infinite it's a non-issue; more will come in and the cycle continues.
Since all fluids in the game are infinite it's a non-issue; more will come in and the cycle continues.
If you want to get ahold of me I'm almost always on Discord.
Re: please do not use floating point value in Factorio
With fluid mixing being prevented when possible, and the ability to manually flush all connected fluid boxes, is that still a beneficial feature? Small amounts in the pipes can't clog up the movement of the same fluid type. I don't feel it's harmful, but if it no longer serves it's purpose due to other changes should it still be there?
Of course if you were to remove it you would of course hear from at least one person who's entire factory bypasses all the protection against fluid mixing and relies on it flush pipes to change fluids and who's factory has grinded to a halt due to the change.
Of course if you were to remove it you would of course hear from at least one person who's entire factory bypasses all the protection against fluid mixing and relies on it flush pipes to change fluids and who's factory has grinded to a halt due to the change.
Re: please do not use floating point value in Factorio
It still is. automated flushing vs manual flushing is an obvious choice in a game about automation. The incomplete emptying of pipes when almost empty has been often requested for years before the current solution was implemented. Maanual flushing means that people can't rely on the system to work in its own (but are useful when a design mistake was made). When in operation mode, people won't want to manually flush every time a fluid changes in a pipe where several fluids are supposed to flow depending on the conditions.
Koub - Please consider English is not my native language.
Re: please do not use floating point value in Factorio
Given that mixing fluids has largely been considered a mistake, it stands to reason that the reason it was an often requested feature had to do more with accidentally getting a fluid into a pipe meant for something else, and being able to attach a pump to get it all out without picking up all the pipes and rebuilding them. That use case is superseded by manual flushing.Koub wrote: ↑Wed Feb 17, 2021 7:27 amIt still is. automated flushing vs manual flushing is an obvious choice in a game about automation. The incomplete emptying of pipes when almost empty has been often requested for years before the current solution was implemented. Maanual flushing means that people can't rely on the system to work in its own (but are useful when a design mistake was made). When in operation mode, people won't want to manually flush every time a fluid changes in a pipe where several fluids are supposed to flow depending on the conditions.
Re: please do not use floating point value in Factorio
Actually, the use cases I remember seeing it requested for were :
- Fluid wagons that couldn't be emptied of the last fraction of fluid unit, which prevented the trains to leave with "on empty" condition (not even trying to enter into the train reusable for different fluids).
- Generic fluid loading/unloading stations, with pumps sending the fluid to a place or another depending on the fluid
- Fluid wagons that couldn't be emptied of the last fraction of fluid unit, which prevented the trains to leave with "on empty" condition (not even trying to enter into the train reusable for different fluids).
- Generic fluid loading/unloading stations, with pumps sending the fluid to a place or another depending on the fluid
Koub - Please consider English is not my native language.
Re: please do not use floating point value in Factorio
Do fluid wagons currently have actual fluid boxes? The prototype does not, it only has a capacity property of 25000. They don't interact with other fluid boxes the way that other entities do, only though pumps. The debug option for fluid box info also shows no information on fluid wagons.Koub wrote: ↑Wed Feb 17, 2021 4:35 pm Actually, the use cases I remember seeing it requested for were :
- Fluid wagons that couldn't be emptied of the last fraction of fluid unit, which prevented the trains to leave with "on empty" condition (not even trying to enter into the train reusable for different fluids).
- Generic fluid loading/unloading stations, with pumps sending the fluid to a place or another depending on the fluid
As for the second one, it's not really possible to build such stations anymore. I get this when I try using pumps to control the flow of the fluid.
Re: please do not use floating point value in Factorio
thanks for many discussion.
(i learning English so i maybe writing based on misreading...)
now i want to change subject to "now we need an auto-flusing in fluid network?"
that's what i really wanted to see.
Zanthra seems to be thinking what i want to know
i understand tiny fluids that less than 0.05 are flusing automatically, it is expected on Factorio.
there is a historical reason why auto-flusing needed.
auto-flusing was helpful for mistake, and it is useful for change the usage of existing pipes.
but wagon or tank is not infinite source in some cases, some time-scale, it's maybe a issue.
actually, i had trouble like a first post.
---
now, we got a manual-flusing, and mistake is protected in advance.
don't you think a manual-flusing and this protection can replace an auto-flusing?
when we really need an auto-flusing?
i think for example, we can't make a time shareing fluid network without an auto-flushing.
it shared different fluids by circuit or something in different time.
(i have'nt seen so much, such a shareing network, because it's popular, that is mistake...)
surely, auto-flusing is expected. i understand.
from the Factorio's point of view, it is explicit.
but from the player's point of view, it is implicit.
some people maybe still needs an auto-flusing, but can't it be chooseable toggle in options?
(i learning English so i maybe writing based on misreading...)
now i want to change subject to "now we need an auto-flusing in fluid network?"
that's what i really wanted to see.
Zanthra seems to be thinking what i want to know
i understand tiny fluids that less than 0.05 are flusing automatically, it is expected on Factorio.
there is a historical reason why auto-flusing needed.
auto-flusing was helpful for mistake, and it is useful for change the usage of existing pipes.
surely, pumpjack or offshore-pump is infinite source of fluid, it's a non-issue.
but wagon or tank is not infinite source in some cases, some time-scale, it's maybe a issue.
actually, i had trouble like a first post.
---
now, we got a manual-flusing, and mistake is protected in advance.
don't you think a manual-flusing and this protection can replace an auto-flusing?
when we really need an auto-flusing?
i think for example, we can't make a time shareing fluid network without an auto-flushing.
it shared different fluids by circuit or something in different time.
(i have'nt seen so much, such a shareing network, because it's popular, that is mistake...)
surely, auto-flusing is expected. i understand.
from the Factorio's point of view, it is explicit.
but from the player's point of view, it is implicit.
some people maybe still needs an auto-flusing, but can't it be chooseable toggle in options?
Re: please do not use floating point value in Factorio
oh fluid wagons can't departure with "empty" condition due to tiny fluids.Koub wrote: ↑Wed Feb 17, 2021 4:35 pm Actually, the use cases I remember seeing it requested for were :
- Fluid wagons that couldn't be emptied of the last fraction of fluid unit, which prevented the trains to leave with "on empty" condition (not even trying to enter into the train reusable for different fluids).
- Generic fluid loading/unloading stations, with pumps sending the fluid to a place or another depending on the fluid
it's difficult to stand each side.
if i had to choose one, other condition for departure without auto-flusing is better than lost a tiny fluid.
because there are fixed fluids 25000 per wagons in cycle of train at always.
with an auto-flusing, fluids decrease with cycle.
very complex...
my trouble is simple, it's due to different pipe length makes different decrease, so how to solve is align of pipe length,
or "idle time" condition with circuit that related other train stop's state.....
going the first time,
why fluid wagons can't be empty by pumps?
it's a limit of fluid network specifications?
if make can be, specifications be collapse?
so we need auto-flusing?
if fluid wagons can be empty by pumps, we don't worry.....
Re: please do not use floating point value in Factorio
Would it be possible to override that for modded games? Specifically, Pyanodons, and the seablock mod for it? Early game, I'm slowly producing liquid glass from quartz at a rate of 10 fluid units per 10 seconds or so, and with the underground pipe length I was using, I was experiencing 75% fluid loss thanks to that 'feature'.
Even with short range transport from a producer to a consumer, I was losing liquid glass over time at a rate of 0.1 units every minute or so. I could tell since the amount in the destination went from a whole number to .9, .8, etc.
Also, since pipes can only have one fluid type now without exploits, there is zero reason for any automatic flush to ever occur. If a manual flush is desired, it's easy enough to connect a pump to one end of the pipe system.