Top
Best
New

Posted by fouronnes3 4 days ago

Show HN: I made a spreadsheet where formulas also update backwards(victorpoughon.github.io)
Hello HN! I'm happy to release this project today. It's a bidirectional calculator (hence the name bidicalc).

I've been obsessed with the idea of making a spreadsheet where you can update both inputs and outputs, instead of regular spreadsheets where you can only update inputs.

Please let me know what you think! Especially if you find bugs or good example use cases.

248 points | 113 comments
pedrozieg 2 days ago|
The interesting thing here isn’t “spreadsheet, but backwards” so much as “spreadsheet as a constraint system”. Classic spreadsheets are basically DAGs: data flows one way and a lot of UX assumptions (and people’s intuition) rely on that. As soon as you allow arbitrary cells to be solved for, you’re in “which variables are free?” land, and most of the confusion in this thread is really about degrees of freedom, not about the math.

One way to make this less surprising might be to flip the default: treat all cells as fixed unless explicitly marked as solver variables, and give a lightweight visualization of “these are the cells that will move if you edit this one.” That keeps the power of a general constraint solver while preserving the mental model spreadsheet users already have, and it opens the door to more serious use cases (financial models, physics, scheduling) without feeling like spooky action at a distance.

fouronnes3 2 days ago|
That's great feedback, thanks! I agree with you, but I don't want to flip the default because this is an experiment I made for fun, and the whole point is to lean in to the chaos a little bit. In a serious product the UX would definitely need a lot more work though.
abakker 1 day ago||
Graphically, I really like the way autodesk makes sketches in fusion 360 blue until they are fully constrained, and then they are black. My intuition here is that you could color code “degrees of freedom” and “locked” states so that it was more intuitive.
willrshansen 2 days ago||
The first example on the main page has a formula with two variables being updated from changing one value. The immediate question I have is if I change the output, where does the extra degree of freedom come from on the inputs? Does one stay locked in place? Unclear.

I am a huge fan of the concept though. It's been bugging me for years that my spreadsheet doesn't allow editing text fields after filtering and sorting them down to the subset I want. I have to go all the way back to the mess of unsorted input rows to actually edit them.

rahimnathwani 2 days ago||

  Does one stay locked in place? Unclear.
If you set C1=A1+B1 then, when you set a value for C1, A1 and B1 are each half of that value, even if they started off unbalanced.
geon 2 days ago|||
It would make more sense to preserve the ratio if possible.
pxx 2 days ago|||
Yeah, this concept is interesting but the fact that the simplest test case gives what's fundamentally a surprising result is very annoying.

It also doesn't help that in the example, the expected outcome of 53.3333/46.6667 isn't even considered.

fouronnes3 2 days ago||||
You can do this with bidicalc already! You just have to model the problem correctly. If you expect the ratio to remain constant, what you actually want is a problem with a single free variable: the scale.

    A1 = 1.0       // the scale, your variable
    A2 = 6 * A1    // intermediate values
    A3 = 8 * A1 
    A4 = A2 + A3   // the sum
Now update A4 (or any other cell!) and the scale (A1, the only variable) will update as you expect.
rafabulsing 2 days ago|||
To get that, you could pass the ratio explicitly. C = 5A + 7B
idiotsecant 2 days ago||||
What is inputs a,b,c,d,and e are polynomial coefficients? I am hoping to get a fields medal plz respond.
fouronnes3 2 days ago||
You can actually solve fifth order polynomials with bidicalc! But it's a numerical solution, not an algebraic one, so no Fields medal.
exe34 2 days ago|||
I think it would be good if you could lock one of them.
hamandcheese 2 days ago||
You can.
shomp 2 days ago||
With # (octothorpe) #Val
ximm 2 days ago||
100% this. When I reached the end of that page I felt pranked because the obvious question was never answered. How are these cases resolved? Is it possible to fix some inputs and only update others? What if I sometimes want to change input A, and other times I want to update input B? All this should be explained as early as possible.
fouronnes3 2 days ago||
You can do it and it is explained, actually. Use # as a prefix to indicate a constant, e.g.: #50 will be a constant and not a variable.

In the future I'd like to support more user input constraints, in particular domain constraints for variables. So you could tell the solver that this cell must remain in some interval, and it would respect that interval instead of assigning any real value.

nkrisc 2 days ago|||
IMO constant should be the default and variables should be annotated.
areyousure 2 days ago||
I have wanted one general application of this idea in a spreadsheet. Specifically, I track some of my running, including speed (pace), distance, and time. Under different circumstances, I have exactly two of the three available and I want the third to be computed, but it varies which. I have found it fairly difficult to implement this kind of data entry in Google Spreadsheets and Excel, even know conceptually it's a very simple constraint "a*b=c" where I know some two variables.

As a more substantive comment: You may find the thesis "Propagation networks : a flexible and expressive substrate for computation" by Alexey Radul interesting. https://dspace.mit.edu/handle/1721.1/54635

fainpul 1 day ago||
You could create a table with 3 columns: distance, time, pace. Set the display format for time and pace to "Duration".

Enter these formulas:

  distance = time / pace
  time = distance * pace
  pace = time / distance
Drag fill everything down. At this point you get reference errors, but once you enter any two values (thereby overwriting the formulas in those cells), you get your result.
culi 1 day ago|||
You just need two spreadsheet tabs. One for the "raw" input and one with a formula that either takes the input if it exists or falls back to the calculated version
davexunit 1 day ago||
Came here to see if anyone mentioned propagators. That thesis is excellent. I second the recommendation.
SoftTalker 2 days ago||
Can you enter an RSA key and have it produce two prime numbers?
spiderice 2 days ago||
A random tool like this would be the most entertaining possible way for something like that to be unleashed on the world
jamestimmins 2 days ago|||
My brother once suggested that there are probably bits of code/algorithms that would be world changing if they were released in academic journals, but instead were written by some unknowing programmer in an afternoon for their job coding embedded systems for refrigerators.

This particular example may be unlikely, but it's a very fun idea.

RobotToaster 2 days ago|||
An anonymous 4chan user once solved a 25 year old maths problem, to answer a question about the watch order of an anime. https://www.scientificamerican.com/article/the-surprisingly-...
InsideOutSanta 2 days ago||||
Iirc, Heisenberg reinvented Matrix calculations to solve a problem in quantum physics. Not being a mathematician, he wasn't aware of the concept. Born recognized what Heisenberg had done and introduced him to his own reinvention.
geon 2 days ago||
PBS Space Time released a video with that story yesterday: https://www.youtube.com/watch?v=c-Q5r3THR3M
Suppafly 2 days ago||||
Lots of people working in different fields end up reinventing things that have been known to math for centuries, often in clunky roundabout ways. I imagine some of them figure out things not known to math, but it's far more likely to go the other way.
Towaway69 2 days ago|||
Folks shouldn’t be afraid to “rediscover” stuff.

Primarily because the learnings you make are the same as the original “discoverer”. Without those learnings, you might not be able to arrive at your true destination.

Suppafly 2 days ago||
>Folks shouldn’t be afraid to “rediscover” stuff.

Luckily no one is suggesting that.

geon 2 days ago||
A lot of people suggest that. So many that it has become an idiom. "Don't reinvent the wheel."
nico 2 days ago||||
> Lots of people working in different fields end up reinventing things that have been known to math for centuries

I remember reading, about a year or two ago, about a medical doctor that published a paper rediscovering calculus (I just looked it up, it happened in 1994, there’s been many articles and videos about it)

dizhn 2 days ago|||
It's not clear from the Wikipedia article linked below whether she was rediscovering part of calculus or knowingly rebranding it. Do you know more details?
alexchantavy 2 days ago|||
lmao: https://en.wikipedia.org/wiki/Tai%27s_model

This is such a great story

agumonkey 1 day ago|||
it's a fact of geographical and social independence.. so far there's no way to know what everybody did or is doing (well there's twitter but it's configured on noise rather than signal)
RachelF 2 days ago|||
A lot of the time engineers are focussed with solving a problem, to build a working machine/program, while academics just want to publish.

This is also true with patents.

fouronnes3 2 days ago|||
Jokes aside, let's say someone does figure out how to break RSA over a weekend project. The evil options are easy to come up with, but what is the actually responsible, ethical, thing to do? Never tell anyone?
zoky 2 days ago|||
Contact a known and trusted security researcher who can verify to the world that you did what you said you did, so everyone else can have as much time as possible to figure out exactly how fucked they are. Doing nothing isn’t an option; once someone figures something like that out, it signifies that conditions were ripe for the discovery to be made, and it’s only a matter of time before it’s discovered again independently.
dizhn 2 days ago||
Also fairly reasonable to assume it has already been done by someone who had a motive to break it and is keeping quiet.
sroerick 2 days ago|||
Pretend you had developed a quantum computing advancement and push people to post quantum encryption
anonymousiam 1 day ago||
Migrating to post quantum encryption is important, but it's also important to not be herded into a "solution" that can be/has been easily compromised.

https://blog.cr.yp.to/20251004-weakened.html

fainpul 1 day ago|||
In Prolog you can write rules (similar to functions in other languages) so that they work "both ways". Let's say you have this rule that defines how pace ("runner's speed") relates to distance and time:

  :- use_module(library(clpr)).

  pace(Km, Minutes, Pace) :-
    { Minutes = Km * Pace }.

Even though the rule only specifies how Minutes are calculated, Prolog can now also calculate the other values.

You can query it, giving unknowns an uppercase `Name`, and it will give you the possible values for it:

  pace(5, 24.5, Pace)
  pace(40, Min, 5)
  pace(Km, 24.5, 5)
  pace(Km, Time, 5)
  
You can try it here: https://swish.swi-prolog.org/

So if you had a rule that defines RSA key calculation this way, you could enter a key and get all valid solutions for the primes. But of course complex calculations still take a long time. I assume it's similar to a brute force attack in that way (Prolog has clever strategies to explore the solution space though).

Disclaimer: I'm not an expert in Prolog or cryptography, so this might not be 100% accurate.

yonatan8070 2 days ago||
Or enter a public key + some encrypted data to get the private key
b-karl 2 days ago||
In Excel you have goal seek for this functionality. I believe it does some form of numerical solving of the equation system.

Good for every situation when you need to solve equations!

In the context of using spreadsheets I think about solving simple financial or maybe construction/mechanical design problems where you don’t want to solve it manually or program it and a spreadsheet is a quick and useful interface.

graemep 2 days ago||
This is very different in practice, because it is pervasive rather than something you have to set up for particular cases.

If this was usual it would help a lot with people's tendency to hard code the correct answer rather than fix formulae. Just that aspect of it would be a huge improvement. People do this all the time with simple financial problem, for example.

A lot of what people use spreadsheets for is not all that simple. Again, especially with financial applications. People manage huge amounts of money using horribly complex models implemented in Excel.

moron4hire 2 days ago||
It does not. It perturbates the variables and uses a hill-climbing algorithm.
fouronnes3 2 days ago||
Interesting. Note that the backwards solver of bidicalc does not use the previous input values of variables at all.
Animats 2 days ago||
Somebody did this back in the DOS era. The program was sometimes called "the crooked accountant's spreadsheet", because you could start with the outputs you wanted and get the input numbers adjusted to fit.

Anyone remember?

amirhirsch 2 days ago||
Cool!

Constraint propagation from SICP is a great reference here:

https://sicp.sourceacademy.org/chapters/3.3.5.html

fouronnes3 2 days ago|
I wasn't aware of this chapter, but I did use constraint propagation for the solver (among other things), thanks!
adonovan 2 days ago||
“Formulas that update backwards” is the main idea behind neural networks such as LLMs: the computation network produces a value, the error in this value is computed, and then the error quantity is pushed backward through the network; this relies on the differentiability of the function computed at each node in the network.
big-chungus4 2 days ago||
"Formulas that update backwards" isn't really the main idea behind neural networks. It's an efficient way of computing gradients, but there are other ways. For example forward propagation would compute a jacobian-matrix product of input wrt output with an identity matrix. Backpropagation is similar to bidi-calc to the same extent as it is similar to many other algorithms which traverse some graph backward.

I think you should be able to use bidi-calc to train a neural net, altough I haven't tried. You'd define a neural net, and then change it's random output to what you want it to output. However as I understand it, it won't find a good solution. It might find a least squares solution to the last layer, then you'd want previous layer to output something that reduces error of the last layer, but bidi-calc will no longer consider last layer at all.

uoaei 2 days ago||
All those words and you forget to provide people the breadcrumbs to learn more for themselves.

The term of interest is "backpropagation".

Towaway69 2 days ago||
Won’t another breadcrumb be Prolog and “declarative programming”[1].

Wasn’t Prolog invented to formalise these kinds of problems of making the inputs match what the desired output should be.

[1] https://en.wikipedia.org/wiki/Declarative_programming

vandyswa 2 days ago|||
Yes, I'm glad to see a comment on Prolog. I think of it as _the_ foundational programming language for solving such problems. It isn't so much that it's a back propagation language; it's just that, based on which variables are bound at a given point, it will go forward deductively, or backwards inductively.
uoaei 2 days ago|||
Prolog has basically nothing to do with calculus.
jsax 2 days ago||
This is pretty cool.

This functionality is called ‘break back’ in a lot of enterprise modelling software. See [IBM TM1](https://www.ibm.com/docs/en/cognos-planning/10.2.1?topic=bre...) and [Anaplan](https://help.anaplan.com/breakback-1b7aa87d-aa13-49f6-8f7d-d...). They generally work in terms of scaling the inputs to match the new output though, which is a bit more basic than this approach.

fouronnes3 2 days ago|
Interesting, thanks! I had never heard of this. Yes, bidicalc is much more advanced. You can update any value of an arbitrary dependency graph of cells.
satvikpendem 2 days ago|
Ah, two way data binding. If you've used any frameworks before React (and a couple earlier ones with the same philosophy) you'll understand how it becomes a spaghetti mess over time.
culi 1 day ago|
Not necessarily if you're following best practices. Modern angular is quite scalable and uses two way data binding
More comments...