GNU printf usa long double
enquanto zsh usa% normal co_de % s . O comportamento de arredondamento que você vê é porque (digamos) 1.45 não pode ser representado como uma soma de potências de 2, que é como IEEE 754 flutuante A representação de ponto funciona e a aproximação mais próxima varia de acordo com a precisão. É um pouco mais (com 80 bits) ou menos (com 64 bits), arredondando para cima ou para baixo como você vê.
Como sempre, se você se preocupa com representações e arredondamentos precisos em nível humano, não use ponto flutuante.