Chatgpt 4.o is cannot count in formula

“The formula can’t correctly count the parentheses, and I want to know if anyone else has experienced the same issue. I am using ChatGPT Plus.”

if(IsReceptacle, 25 A, if([Demand Factor - Total] = 1.5, if(Demand_Current * 1.25 < 25.01 A, 25 A, if(Demand_Current * 1.25 < 32.01 A, 32 A, if(Demand_Current * 1.25 < 40.01 A, 40 A, if(Demand_Current * 1.25 < 50.01 A, 50 A, if(Demand_Current * 1.25 < 63.01 A, 63 A, if(Demand_Current * 1.25 < 80.01 A, 80 A, if(Demand_Current * 1.25 < 100.01 A, 100 A, if(Demand_Current * 1.25 < 125.01 A, 125 A, if(Demand_Current * 1.25 < 160.01 A, 160 A, if(Demand_Current * 1.25 < 200.01 A, 200 A, if(Demand_Current * 1.25 < 250.01 A, 250 A, if(Demand_Current * 1.25 < 315.01 A, 315 A, if(Demand_Current * 1.25 < 400.01 A, 400 A, if(Demand_Current * 1.25 < 500.01 A, 500 A, 630 A))))))))))))))))), if(Demand_Current * 1.25 < 16.01 A, 16 A, if(Demand_Current * 1.25 < 25.01 A, 25 A, if(Demand_Current * 1.25 < 32.01 A, 32 A, if(Demand_Current * 1.25 < 40.01 A, 40 A, if(Demand_Current * 1.25 < 50.01 A, 50 A, if(Demand_Current * 1.25 < 63.01 A, 63 A, if(Demand_Current * 1.25 < 80.01 A, 80 A, if(Demand_Current * 1.25 < 100.01 A, 100 A, if(Demand_Current * 1.25 < 125.01 A, 125 A, if(Demand_Current * 1.25 < 160.01 A, 160 A, if(Demand_Current * 1.25 < 200.01 A, 200 A, if(Demand_Current * 1.25 < 250.01 A, 250 A, if(Demand_Current * 1.25 < 315.01 A, 315 A, if(Demand_Current * 1.25 < 400.01 A, 400 A, if(Demand_Current * 1.25 < 500.01 A, 500 A, 630 A))))))))))))))))))) ---------------------------------VS--------------------------------------------------------

  1. if(IsReceptacle, 25 A, ← 1-р хаалт нээгдэж байна
  2. if([Demand Factor - Total] = 1.5, ← 2-р хаалт нээгдэж байна
  3. if(Demand_Current * 1.25 < 25.01 A, 25 A,  ← 3-р хаалт нээгдэж байна
    
  4.   if(Demand_Current * 1.25 < 32.01 A, 32 A,  ← 4-р хаалт нээгдэж байна
    
  5.     if(Demand_Current * 1.25 < 40.01 A, 40 A,  ← 5-р хаалт нээгдэж байна
    
  6.       if(Demand_Current * 1.25 < 50.01 A, 50 A,  ← 6-р хаалт нээгдэж байна
    
  7.         if(Demand_Current * 1.25 < 63.01 A, 63 A,  ← 7-р хаалт нээгдэж байна
    
  8.           if(Demand_Current * 1.25 < 80.01 A, 80 A,  ← 8-р хаалт нээгдэж байна
    
  9.             if(Demand_Current * 1.25 < 100.01 A, 100 A,  ← 9-р хаалт нээгдэж байна
    
  10.              if(Demand_Current * 1.25 < 125.01 A, 125 A,  ← 10-р хаалт нээгдэж байна
    
  11.                if(Demand_Current * 1.25 < 160.01 A, 160 A,  ← 11-р хаалт нээгдэж байна
    
  12.                  if(Demand_Current * 1.25 < 200.01 A, 200 A,  ← 12-р хаалт нээгдэж байна
    
  13.                    if(Demand_Current * 1.25 < 250.01 A, 250 A,  ← 13-р хаалт нээгдэж байна
    
  14.                      if(Demand_Current * 1.25 < 315.01 A, 315 A,  ← 14-р хаалт нээгдэж байна
    
  15.                        if(Demand_Current * 1.25 < 400.01 A, 400 A,  ← 15-р хаалт нээгдэж байна
    
  16.                          if(Demand_Current * 1.25 < 500.01 A, 500 A,  ← 16-р хаалт нээгдэж байна
    
  17.                            630 A)  ← 16-р хаалт хаагдаж байна
    
  18.                          )  ← 15-р хаалт хаагдаж байна
    
  19.                        )  ← 14-р хаалт хаагдаж байна
    
  20.                      )  ← 13-р хаалт хаагдаж байна
    
  21.                    )  ← 12-р хаалт хаагдаж байна
    
  22.                  )  ← 11-р хаалт хаагдаж байна
    
  23.                )  ← 10-р хаалт хаагдаж байна
    
  24.              )  ← 9-р хаалт хаагдаж байна
    
  25.            )  ← 8-р хаалт хаагдаж байна
    
  26.          )  ← 7-р хаалт хаагдаж байна
    
  27.        )  ← 6-р хаалт хаагдаж байна
    
  28.      )  ← 5-р хаалт хаагдаж байна
    
  29.    )  ← 4-р хаалт хаагдаж байна
    
  30.  )  ← 3-р хаалт хаагдаж байна
    
  31. ) ← 2-р хаалт хаагдаж байна
  32. if(Demand_Current * 1.25 < 16.01 A, 16 A, ← 17-р хаалт нээгдэж байна
  33. if(Demand_Current * 1.25 < 25.01 A, 25 A, ← 18-р хаалт нээгдэж байна
  34.  if(Demand_Current * 1.25 < 32.01 A, 32 A,  ← 19-р хаалт нээгдэж байна
    
  35.    if(Demand_Current * 1.25 < 40.01 A, 40 A,  ← 20-р хаалт нээгдэж байна
    
  36.      if(Demand_Current * 1.25 < 50.01 A, 50 A,  ← 21-р хаалт нээгдэж байна
    
  37.        if(Demand_Current * 1.25 < 63.01 A, 63 A,  ← 22-р хаалт нээгдэж байна
    
  38.          if(Demand_Current * 1.25 < 80.01 A, 80 A,  ← 23-р хаалт нээгдэж байна
    
  39.            if(Demand_Current * 1.25 < 100.01 A, 100 A,  ← 24-р хаалт нээгдэж байна
    
  40.              if(Demand_Current * 1.25 < 125.01 A, 125 A,  ← 25-р хаалт нээгдэж байна
    
  41.                if(Demand_Current * 1.25 < 160.01 A, 160 A,  ← 26-р хаалт нээгдэж байна
    
  42.                  if(Demand_Current * 1.25 < 200.01 A, 200 A,  ← 27-р хаалт нээгдэж байна
    
  43.                    if(Demand_Current * 1.25 < 250.01 A, 250 A,  ← 28-р хаалт нээгдэж байна
    
  44.                      if(Demand_Current * 1.25 < 315.01 A, 315 A,  ← 29-р хаалт нээгдэж байна
    
  45.                        if(Demand_Current * 1.25 < 400.01 A, 400 A,  ← 30-р хаалт нээгдэж байна
    
  46.                          if(Demand_Current * 1.25 < 500.01 A, 500 A,  ← 31-р хаалт нээгдэж байна
    
  47.                            630 A)  ← 31-р хаалт хаагдаж байна
    
  48.                          )  ← 30-р хаалт хаагдаж байна
    
  49.                        )  ← 29-р хаалт хаагдаж байна
    
  50.                      )  ← 28-р хаалт хаагдаж байна
    
  51.                    )  ← 27-р хаалт хаагдаж байна
    
  52.                  )  ← 26-р хаалт хаагдаж байна
    
  53.                )  ← 25-р хаалт хаагдаж байна
    
  54.              )  ← 24-р хаалт хаагдаж байна
    
  55.            )  ← 23-р хаалт хаагдаж байна
    
  56.          )  ← 22-р хаалт хаагдаж байна
    
  57.        )  ← 21-р хаалт хаагдаж байна
    
  58.      )  ← 20-р хаалт хаагдаж байна
    
  59.    )  ← 19-р хаалт хаагдаж байна
    
  60.  )  ← 18-р хаалт хаагдаж байна
    
  61. ) ← 17-р хаалт хаагдаж байна
  62. ) ← 1-р хаалт хаагдаж байна

When working with deeply nested IF formulas, fixing them manually becomes increasingly difficult and error-prone, especially when tracking parentheses across dozens of levels.
To avoid these issues:

  • Don’t use deep nested IF structures.
  • Use lookup tables or programmatic logic to simplify conditions.
  • In Excel/Google Sheets, consider alternatives like LOOKUP(), INDEX/MATCH(), IFS(), or custom VBA/Python scripts.

This approach keeps the structure flat, clear, and less prone to syntax errors.


Example using Python

If you are open to using Python, here’s a clean example of how to replace the nested IF logic with a much more maintainable function:

def determine_amperage(is_receptacle: bool, demand_factor_total: float, demand_current: float) -> int:
    if is_receptacle:
        return 25  # Immediate rule for receptacles

    adjusted_current = demand_current * 1.25

    if demand_factor_total == 1.5:
        thresholds = [
            (25.01, 25), (32.01, 32), (40.01, 40), (50.01, 50),
            (63.01, 63), (80.01, 80), (100.01, 100), (125.01, 125),
            (160.01, 160), (200.01, 200), (250.01, 250), (315.01, 315),
            (400.01, 400), (500.01, 500), (float('inf'), 630)
        ]
    else:
        thresholds = [
            (16.01, 16), (25.01, 25), (32.01, 32), (40.01, 40),
            (50.01, 50), (63.01, 63), (80.01, 80), (100.01, 100),
            (125.01, 125), (160.01, 160), (200.01, 200), (250.01, 250),
            (315.01, 315), (400.01, 400), (500.01, 500), (float('inf'), 630)
        ]

    for limit, amperage in thresholds:
        if adjusted_current < limit:
            return amperage

    # Safety: should not be reachable if thresholds are correct
    raise ValueError("Adjusted current did not match any threshold.")

Example usage:

if __name__ == "__main__":
    print(determine_amperage(is_receptacle=True, demand_factor_total=1.0, demand_current=100))  # → 25
    print(determine_amperage(is_receptacle=False, demand_factor_total=1.5, demand_current=20))  # → 25
    print(determine_amperage(is_receptacle=False, demand_factor_total=1.0, demand_current=10))  # → 16

Sample output:

(.conda) (base) razvansavin@DESKTOP-RK7VKJ8:~/Proiecte/refactor_project_five_v3$ python amp.py
25
25
16
(.conda) (base) razvansavin@DESKTOP-RK7VKJ8:~/Proiecte/refactor_project_five_v3$

Additional Note (for GPT-4 / API users)

Since you are working with GPT-4 (as indicated by your tags), if you are automating formula generation or complex logic creation, you might consider using the Assistant APIs with function calling or tool use features.

This allows GPT to generate structured outputs (such as balanced formulas, JSON responses, code structures) without the typical risks of mismatched parentheses or fragmented logic, especially in large nested scenarios.

Using structured function calls can help create safer, more reliable outputs compared to plain text prompting.


Your json function for Assistant to use it via API and “play” with it:


{
  "name": "determine_amperage",
  "description": "Determines the appropriate circuit breaker amperage based on receptacle status, demand factor, and demand current according to electrical safety rules.",
  "parameters": {
    "type": "object",
    "properties": {
      "is_receptacle": {
        "type": "boolean",
        "description": "Indicates if the load is a receptacle. If true, a fixed 25A breaker is assigned."
      },
      "demand_factor_total": {
        "type": "number",
        "description": "The total demand factor. If it equals 1.5, special amperage thresholds apply."
      },
      "demand_current": {
        "type": "number",
        "description": "The base demand current (in Amperes) before applying the 1.25 safety adjustment factor."
      }
    },
    "required": [
      "is_receptacle",
      "demand_factor_total",
      "demand_current"
    ]
  }
}