Как эмулировать float / double / real в Bazel? - PullRequest
0 голосов
/ 30 мая 2019

Bazel (0.26.0) не поддерживает типы с плавающей точкой, так как вы можете прочитать здесь .

Однако я хотел бы вычислить некоторое магическое число (с плавающей запятой), хранить их вstring как показано здесь:

def magicNumber():
    fileStr = ""
    count = 200
    for i in range(0, count-1):
        v = i / count
        fileStr += str(v) + " "

    return fileStr

Я хочу использовать для этого только функции Bazel.Для меня очевидно, что я мог бы также разместить свои вычисления, например, в скрипте batch / shell, но я хочу придерживаться только функций Bazel.Есть идеи как этого добиться?

1 Ответ

2 голосов
/ 30 мая 2019

Неясно, почему вы хотите это сделать.Обычно целых должно быть достаточно.

Если вам нужна последовательность «0,0 0,005 0,01 0,015 0,02 ... 0,995», вы можете сделать это следующим образом:

def magic():
  fileStr = ""
  for i in range(0, 1000, 5):
    s = ("000" + str(i))[-3:] # Add leading 0s
    fileStr += "0.{} ".format(s.rstrip('0'))
  return fileStr

Поскольку строкине являются изменяемыми, += на строку скопирует это.Делать это в цикле не рекомендуется для производительности (квадратичная сложность).Вместо этого вы можете добавлять данные в массив и присоединять их в конце.Это тот же результат, за исключением того, что у него нет завершающего пробела:

def magic():
  data = []
  for i in range(0, 1000, 5):
    s = ("000" + str(i))[-3:]
    data.append("0." + s.rstrip('0'))
  return " ".join(data)
...